From ce53c7689bca9554a64b689896c9c47e8aea3580 Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Sat, 10 Sep 2022 20:46:20 +0300 Subject: [PATCH] [Improvement] Allow to search messages from user --- Telegram/Resources/langs/rewrites/en.json | 1 + .../boxes/peers/edit_participants_box.cpp | 18 ++++++++++++++++++ .../SourceFiles/dialogs/dialogs_widget.cpp | 14 ++++++++++++-- Telegram/SourceFiles/dialogs/dialogs_widget.h | 2 +- .../history/history_inner_widget.cpp | 13 +++++++++++++ Telegram/SourceFiles/mainwidget.cpp | 6 +++--- Telegram/SourceFiles/mainwidget.h | 2 +- 7 files changed, 49 insertions(+), 7 deletions(-) diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 12fa32b5e..2b018e5ed 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -98,6 +98,7 @@ "ktg_hide_pinned_message": "Hide", "ktg_stickers_copy_title": "Copy name", "ktg_stickers_title_copied": "Sticker pack name copied to clipboard.", + "ktg_context_show_messages_from": "User messages", "ktg_settings_tray_icon": "Tray icon", "ktg_settings_tray_icon_default": "Default", "ktg_settings_tray_icon_blue": "Blue", diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp index 94caec150..b8942fc36 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/peers/edit_participants_box.h" +#include "kotato/kotato_lang.h" +#include "core/application.h" #include "api/api_chat_participants.h" #include "boxes/peer_list_controllers.h" #include "boxes/peers/edit_participant_box.h" @@ -21,6 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mtproto/mtproto_config.h" #include "apiwrap.h" #include "lang/lang_keys.h" +#include "mainwindow.h" #include "mainwidget.h" #include "dialogs/dialogs_indexed_list.h" #include "data/data_peer_values.h" @@ -33,6 +36,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/popup_menu.h" #include "ui/ui_utility.h" #include "info/profile/info_profile_values.h" +#include "window/window_controller.h" #include "window/window_session_controller.h" #include "history/history.h" #include "styles/style_menu_icons.h" @@ -1598,6 +1602,20 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( ? &st::menuIconProfile : &st::menuIconInfo)); } + if (const auto window = _navigation->parentController()) { + if (const auto mainwidget = window->widget()->sessionContent()) { + result->addAction( + ktr("ktg_context_show_messages_from"), + crl::guard(this, [=] { + mainwidget->searchMessages( + " ", + (_peer && !_peer->isUser()) + ? _peer->owner().history(_peer).get() + : Dialogs::Key(), + user); + }), &st::menuIconSearch); + } + } if (_role == Role::Kicked) { if (_peer->isMegagroup() && _additional.canRestrictParticipant(participant)) { diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 29e509073..191cac5cf 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -35,6 +35,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwidget.h" #include "main/main_domain.h" #include "main/main_session.h" +#include "main/main_account.h" #include "main/main_session_settings.h" #include "api/api_chat_filters.h" #include "apiwrap.h" @@ -1524,7 +1525,10 @@ void Widget::showMainMenu() { controller()->widget()->showMainMenu(); } -void Widget::searchMessages(const QString &query, Key inChat) { +void Widget::searchMessages( + const QString &query, + Key inChat, + UserData *from) { if (_childList) { const auto forum = controller()->shownForum().current(); const auto topic = inChat.topic(); @@ -1565,13 +1569,19 @@ void Widget::searchMessages(const QString &query, Key inChat) { cancelSearch(); setSearchInChat(inChat); } - setSearchQuery(query); + if (!query.trimmed().isEmpty()) { + setSearchQuery(query); + } applyFilterUpdate(true); _searchTimer.cancel(); searchMessages(); session().local().saveRecentSearchHashtags(query); } + if (inChat && from) { + setSearchInChat(inChat, from); + applyFilterUpdate(true); + } } void Widget::searchTopics() { diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index 009f6ca3a..01a8c964b 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -106,7 +106,7 @@ public: void scrollToEntry(const RowDescriptor &entry); - void searchMessages(const QString &query, Key inChat = {}); + void searchMessages(const QString &query, Key inChat = {}, UserData *from = nullptr); void searchTopics(); void searchMore(); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 142f72ff9..fd889838b 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -8,6 +8,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history_inner_widget.h" #include "kotato/kotato_settings.h" +#include "kotato/kotato_lang.h" +#include "mainwidget.h" #include "core/file_utilities.h" #include "core/crash_reports.h" #include "core/click_handler_types.h" @@ -2233,6 +2235,17 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { Window::ToggleMessagePinned(controller, pinItemId, !isPinned); }), isPinned ? &st::menuIconUnpin : &st::menuIconPin); } + const auto peer = item->history()->peer; + if (peer->isChat() || peer->isMegagroup()) { + _menu->addAction(ktr("ktg_context_show_messages_from"), [=] { + controller->content()->searchMessages( + " ", + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key(), + item->from()->asUser()); + }, &st::menuIconSearch); + } }; const auto addPhotoActions = [&](not_null photo, HistoryItem *item) { const auto media = photo->activeMediaView(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 4596f8449..f793762e5 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -751,9 +751,9 @@ void MainWidget::hideSingleUseKeyboard(PeerData *peer, MsgId replyTo) { _history->hideSingleUseKeyboard(peer, replyTo); } -void MainWidget::searchMessages(const QString &query, Dialogs::Key inChat) { +void MainWidget::searchMessages(const QString &query, Dialogs::Key inChat, UserData *from) { if (controller()->isPrimary()) { - _dialogs->searchMessages(query, inChat); + _dialogs->searchMessages(query, inChat, from); if (isOneColumn()) { _controller->clearSectionStack(); } else { @@ -762,7 +762,7 @@ void MainWidget::searchMessages(const QString &query, Dialogs::Key inChat) { } else { const auto searchIn = [&](not_null window) { if (const auto controller = window->sessionController()) { - controller->content()->searchMessages(query, inChat); + controller->content()->searchMessages(query, inChat, from); controller->widget()->activate(); } }; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index fa33b5d83..8feb62dce 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -190,7 +190,7 @@ public: void sendBotCommand(Bot::SendCommandRequest request); void hideSingleUseKeyboard(PeerData *peer, MsgId replyTo); - void searchMessages(const QString &query, Dialogs::Key inChat); + void searchMessages(const QString &query, Dialogs::Key inChat, UserData *from = nullptr); void setChatBackground( const Data::WallPaper &background,