diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index a01c10293..35c107e9d 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -361,6 +361,12 @@ bool ResolveUsernameOrPhone( if (domain == u"telegrampassport"_q) { return ShowPassportForm(controller, params); } else if (!validDomain(domain) && !validPhone(phone)) { + const auto searchParam = params.value(qsl("query")); + if (!searchParam.isEmpty()) { + controller->content()->searchMessages( + searchParam + ' ', + Dialogs::Key()); + } return false; } using ResolveType = Window::ResolveType; @@ -438,6 +444,7 @@ bool ResolveUsernameOrPhone( ? std::make_optional(params.value(u"voicechat"_q)) : std::nullopt), .clickFromMessageId = myContext.itemId, + .searchQuery = params.value(qsl("query")), }); controller->window().activate(); return true; diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index dcf620167..199900d57 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -520,6 +520,16 @@ void SessionNavigation::showPeerByLinkResolved( : info.resolveType; const auto &replies = info.repliesInfo; + const auto searchQuery = info.searchQuery; + + const auto applySearchQuery = [=] { + parentController()->content()->searchMessages( + searchQuery + ' ', + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key()); + }; + if (const auto threadId = std::get_if(&replies)) { showRepliesForMessage( session().data().history(peer), @@ -588,6 +598,14 @@ void SessionNavigation::showPeerByLinkResolved( if (bot || peer->isChannel()) { crl::on_main(this, [=] { showPeerHistory(peer, params); + if (!searchQuery.isEmpty()) { + applySearchQuery(); + } + }); + } else if (!searchQuery.isEmpty()) { + crl::on_main(this, [=] { + showPeerHistory(peer, params); + applySearchQuery(); }); } else { showPeerInfo(peer, params); @@ -610,11 +628,15 @@ void SessionNavigation::showPeerByLinkResolved( crl::on_main(this, [=] { const auto history = peer->owner().history(peer); showPeerHistory(history, params, msgId); - peer->session().attachWebView().request( - parentController(), - Api::SendAction(history), - attachBotUsername, - info.attachBotToggleCommand.value_or(QString())); + if (searchQuery.isEmpty()) { + peer->session().attachWebView().request( + parentController(), + Api::SendAction(history), + attachBotUsername, + info.attachBotToggleCommand.value_or(QString())); + } else { + applySearchQuery(); + } }); } else if (bot && info.attachBotToggleCommand) { const auto itemId = info.clickFromMessageId; @@ -637,6 +659,9 @@ void SessionNavigation::showPeerByLinkResolved( } else { crl::on_main(this, [=] { showPeerHistory(peer, params, msgId); + if (!searchQuery.isEmpty()) { + applySearchQuery(); + } }); } }