From 597816db09dd4e40e904e3403d91ea61e4e9273d Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 29 Oct 2023 09:52:42 +0400 Subject: [PATCH] Show Saved Messages in Reply in another chat. --- Telegram/Resources/langs/lang.strings | 1 + Telegram/SourceFiles/boxes/peer_list_box.cpp | 23 +++++++++++-------- Telegram/SourceFiles/boxes/peer_list_box.h | 10 ++++---- .../boxes/peer_list_controllers.cpp | 8 +++++-- .../SourceFiles/boxes/peer_list_controllers.h | 4 +--- .../boxes/peers/choose_peer_box.cpp | 4 ++-- .../controls/history_view_draft_options.cpp | 6 ++--- 7 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 38fa34855..c4603bca8 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2361,6 +2361,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_saved_messages" = "Saved Messages"; "lng_saved_short" = "Save"; "lng_saved_forward_here" = "Forward messages here for quick access"; +"lng_saved_quote_here" = "Quote here to save"; "lng_scheduled_messages" = "Scheduled Messages"; "lng_scheduled_messages_empty" = "No scheduled messages here yet..."; diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index 28286f377..2c1e361fb 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -456,7 +456,7 @@ int PeerListController::descriptionTopSkipMin() const { void PeerListBox::addSelectItem( not_null peer, anim::type animated) { - const auto respect = _controller->respectSavedMessagesChat(); + const auto respect = !_controller->savedMessagesChatStatus().isEmpty(); const auto text = (respect && peer->isSelf()) ? tr::lng_saved_short(tr::now) : (respect && peer->isRepliesChat()) @@ -579,8 +579,8 @@ void PeerListRow::refreshStatus() { _statusType = StatusType::LastSeen; _statusValidTill = 0; if (auto user = peer()->asUser()) { - if (_isSavedMessagesChat) { - setStatusText(tr::lng_saved_forward_here(tr::now)); + if (!_savedMessagesStatus.isEmpty()) { + setStatusText(_savedMessagesStatus); } else { auto time = base::unixtime::now(); setStatusText(Data::OnlineText(user, time)); @@ -613,7 +613,7 @@ void PeerListRow::refreshName(const style::PeerListItem &st) { if (!_initialized) { return; } - const auto text = _isSavedMessagesChat + const auto text = !_savedMessagesStatus.isEmpty() ? tr::lng_saved_messages(tr::now) : _isRepliesMessagesChat ? tr::lng_replies_messages(tr::now) @@ -683,7 +683,7 @@ QString PeerListRow::generateName() { } QString PeerListRow::generateShortName() { - return _isSavedMessagesChat + return !_savedMessagesStatus.isEmpty() ? tr::lng_saved_short(tr::now) : _isRepliesMessagesChat ? tr::lng_replies_messages(tr::now) @@ -699,7 +699,7 @@ Ui::PeerUserpicView &PeerListRow::ensureUserpicView() { PaintRoundImageCallback PeerListRow::generatePaintUserpicCallback( bool forceRound) { - const auto saved = _isSavedMessagesChat; + const auto saved = !_savedMessagesStatus.isEmpty(); const auto replies = _isRepliesMessagesChat; const auto peer = this->peer(); auto userpic = saved ? Ui::PeerUserpicView() : ensureUserpicView(); @@ -745,7 +745,9 @@ int PeerListRow::paintNameIconGetWidth( int availableWidth, int outerWidth, bool selected) { - if (special() || _isSavedMessagesChat || _isRepliesMessagesChat) { + if (special() + || !_savedMessagesStatus.isEmpty() + || _isRepliesMessagesChat) { return 0; } return _bagde.drawGetWidth( @@ -855,7 +857,7 @@ void PeerListRow::paintDisabledCheckUserpic( auto iconBorderPen = st.checkbox.check.border->p; iconBorderPen.setWidth(st.checkbox.selectWidth); - if (_isSavedMessagesChat) { + if (!_savedMessagesStatus.isEmpty()) { Ui::EmptyUserpic::PaintSavedMessages(p, userpicLeft, userpicTop, outerWidth, userpicRadius * 2); } else if (_isRepliesMessagesChat) { Ui::EmptyUserpic::PaintRepliesMessages(p, userpicLeft, userpicTop, outerWidth, userpicRadius * 2); @@ -1046,9 +1048,10 @@ void PeerListContent::setRowHidden(not_null row, bool hidden) { } void PeerListContent::addRowEntry(not_null row) { - if (_controller->respectSavedMessagesChat() && !row->special()) { + const auto savedMessagesStatus = _controller->savedMessagesChatStatus(); + if (!savedMessagesStatus.isEmpty() && !row->special()) { if (row->peer()->isSelf()) { - row->setIsSavedMessagesChat(true); + row->setSavedMessagesChatStatus(savedMessagesStatus); } else if (row->peer()->isRepliesChat()) { row->setIsRepliesMessagesChat(true); } diff --git a/Telegram/SourceFiles/boxes/peer_list_box.h b/Telegram/SourceFiles/boxes/peer_list_box.h index 837bb6e2c..6dfce4630 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.h +++ b/Telegram/SourceFiles/boxes/peer_list_box.h @@ -185,8 +185,8 @@ public: void setIsSearchResult(bool isSearchResult) { _isSearchResult = isSearchResult; } - void setIsSavedMessagesChat(bool isSavedMessagesChat) { - _isSavedMessagesChat = isSavedMessagesChat; + void setSavedMessagesChatStatus(QString savedMessagesStatus) { + _savedMessagesStatus = savedMessagesStatus; } void setIsRepliesMessagesChat(bool isRepliesMessagesChat) { _isRepliesMessagesChat = isRepliesMessagesChat; @@ -278,12 +278,12 @@ private: StatusType _statusType = StatusType::Online; crl::time _statusValidTill = 0; base::flat_set _nameFirstLetters; + QString _savedMessagesStatus; int _absoluteIndex = -1; State _disabledState = State::Active; bool _hidden : 1 = false; bool _initialized : 1 = false; bool _isSearchResult : 1 = false; - bool _isSavedMessagesChat : 1 = false; bool _isRepliesMessagesChat : 1 = false; }; @@ -517,8 +517,8 @@ public: void peerListSearchAddRow(PeerListRowId id) override; void peerListSearchRefreshRows() override; - [[nodiscard]] virtual bool respectSavedMessagesChat() const { - return false; + [[nodiscard]] virtual QString savedMessagesChatStatus() const { + return QString(); } [[nodiscard]] virtual int customRowHeight() { Unexpected("PeerListController::customRowHeight."); diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 3e2c3abcd..df1a24fba 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -313,7 +313,7 @@ void ChatsListBoxController::rebuildRows() { return count; }; auto added = 0; - if (respectSavedMessagesChat()) { + if (!savedMessagesChatStatus().isEmpty()) { if (appendRow(session().data().history(session().user()))) { ++added; } @@ -330,7 +330,7 @@ void ChatsListBoxController::rebuildRows() { const auto history = static_cast(a).history(); return history->inChatList(); }); - if (respectSavedMessagesChat()) { + if (!savedMessagesChatStatus().isEmpty()) { delegate()->peerListPartitionRows([](const PeerListRow &a) { return a.peer()->isSelf(); }); @@ -696,6 +696,10 @@ void ChooseRecipientBoxController::rowClicked(not_null row) { } } +QString ChooseRecipientBoxController::savedMessagesChatStatus() const { + return tr::lng_saved_forward_here(tr::now); +} + auto ChooseRecipientBoxController::createRow( not_null history) -> std::unique_ptr { const auto peer = history->peer; diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.h b/Telegram/SourceFiles/boxes/peer_list_controllers.h index 35b4e0f15..5d8ef334a 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.h +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.h @@ -218,9 +218,7 @@ public: Main::Session &session() const override; void rowClicked(not_null row) override; - bool respectSavedMessagesChat() const override { - return true; - } + QString savedMessagesChatStatus() const override; protected: void prepareViewHook() override; diff --git a/Telegram/SourceFiles/boxes/peers/choose_peer_box.cpp b/Telegram/SourceFiles/boxes/peers/choose_peer_box.cpp index 60031e0ce..767b0c915 100644 --- a/Telegram/SourceFiles/boxes/peers/choose_peer_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/choose_peer_box.cpp @@ -45,8 +45,8 @@ public: Main::Session &session() const override; void rowClicked(not_null row) override; - bool respectSavedMessagesChat() const override { - return true; + QString savedMessagesChatStatus() const override { + return tr::lng_saved_forward_here(tr::now); } private: diff --git a/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp b/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp index ac6dd6fc3..931aeef55 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp @@ -854,12 +854,12 @@ void ShowReplyToChatBox( ChooseRecipientBoxController::rowClicked(row); } - [[nodiscard]] rpl::producer singleChosen() const{ + [[nodiscard]] rpl::producer singleChosen() const { return _singleChosen.events(); } - bool respectSavedMessagesChat() const override { - return false; + QString savedMessagesChatStatus() const override { + return tr::lng_saved_quote_here(tr::now); } private: