diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 332dc4f10..3a0156afb 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -271,6 +271,12 @@ bool ResolveUsername( if (domain == qsl("telegrampassport")) { return ShowPassportForm(controller, params); } else if (!valid(domain)) { + const auto searchParam = params.value(qsl("query")); + if (!searchParam.isEmpty()) { + controller->content()->searchMessages( + searchParam + ' ', + Dialogs::Key()); + } return false; } auto start = qsl("start"); @@ -321,6 +327,7 @@ bool ResolveUsername( ? std::make_optional(params.value(u"voicechat"_q)) : std::nullopt), .clickFromMessageId = fromMessageId, + .searchQuery = params.value(qsl("query")), }); return true; } diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index f9d50f55a..69b5e2038 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -361,6 +361,7 @@ void SessionNavigation::showPeerByLinkResolved( return; } const auto &replies = info.repliesInfo; + const auto searchQuery = info.searchQuery; if (const auto threadId = std::get_if(&replies)) { showRepliesForMessage( session().data().history(peer), @@ -395,9 +396,23 @@ void SessionNavigation::showPeerByLinkResolved( // Always open bot chats, even from mention links. crl::on_main(this, [=] { showPeerHistory(peer->id, params); + if (!searchQuery.isEmpty()) { + parentController()->content()->searchMessages( + searchQuery + ' ', + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key()); + } }); } else { showPeerInfo(peer, params); + if (!searchQuery.isEmpty()) { + parentController()->content()->searchMessages( + searchQuery + ' ', + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key()); + } } } else { const auto user = peer->asUser(); @@ -414,6 +429,13 @@ void SessionNavigation::showPeerByLinkResolved( } crl::on_main(this, [=] { showPeerHistory(peer->id, params, msgId); + if (!searchQuery.isEmpty()) { + parentController()->content()->searchMessages( + searchQuery + ' ', + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key()); + } }); } }