diff --git a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp index 48182e3bee..910190f94c 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp @@ -740,14 +740,8 @@ void RowPainter::paint( auto history = item->history(); auto cloudDraft = nullptr; const auto from = [&] { - if (const auto searchChat = row->searchInChat()) { - if (const auto peer = searchChat.peer()) { - if (peer->isSelf()) { - return item->senderOriginal(); - } else if (!peer->isChannel() || peer->isMegagroup()) { - return item->from().get(); - } - } + if (row->searchInChat()) { + return item->displayFrom(); } return history->peer->migrateTo() ? history->peer->migrateTo() diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 1b20579cd6..2956eed315 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -218,6 +218,32 @@ ReplyKeyboard *HistoryItem::inlineReplyKeyboard() { return nullptr; } +ChannelData *HistoryItem::discussionPostOriginalSender() const { + if (!history()->peer->isMegagroup()) { + return nullptr; + } + if (const auto forwarded = Get()) { + const auto from = forwarded->savedFromPeer; + if (const auto result = from ? from->asChannel() : nullptr) { + return result; + } + } + return nullptr; +} + +bool HistoryItem::isDiscussionPost() const { + return (discussionPostOriginalSender() != nullptr); +} + +PeerData *HistoryItem::displayFrom() const { + if (const auto sender = discussionPostOriginalSender()) { + return sender; + } else if (history()->peer->isSelf()) { + return senderOriginal(); + } + return author().get(); +} + void HistoryItem::invalidateChatListEntry() { if (const auto main = App::main()) { // #TODO feeds search results @@ -706,7 +732,7 @@ QString HistoryItem::inDialogsText(DrawInDialog way) const { if (isPost() || isEmpty() || (way == DrawInDialog::WithoutSender)) { return nullptr; } else if (!_history->peer->isUser() || out()) { - return author(); + return displayFrom(); } else if (_history->peer->isSelf() && !Has()) { return senderOriginal(); } diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index dc4aa5e3c9..a5519d4d2a 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -305,6 +305,10 @@ public: HistoryMessageReplyMarkup *inlineReplyMarkup(); ReplyKeyboard *inlineReplyKeyboard(); + [[nodiscard]] ChannelData *discussionPostOriginalSender() const; + [[nodiscard]] bool isDiscussionPost() const; + [[nodiscard]] PeerData *displayFrom() const; + virtual std::unique_ptr createView( not_null delegate) = 0; diff --git a/Telegram/SourceFiles/history/history_item_components.cpp b/Telegram/SourceFiles/history/history_item_components.cpp index 30c1b6adc2..b6c167586a 100644 --- a/Telegram/SourceFiles/history/history_item_components.cpp +++ b/Telegram/SourceFiles/history/history_item_components.cpp @@ -234,10 +234,8 @@ bool HistoryMessageReply::isNameUpdated() const { void HistoryMessageReply::updateName() const { if (replyToMsg) { const auto from = [&] { - if (const auto message = replyToMsg->toHistoryMessage()) { - if (const auto from = message->displayFrom()) { - return from; - } + if (const auto from = replyToMsg->displayFrom()) { + return from; } return replyToMsg->author().get(); }(); diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 5472ed3330..e874f11943 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -577,32 +577,6 @@ int HistoryMessage::viewsCount() const { return HistoryItem::viewsCount(); } -ChannelData *HistoryMessage::discussionPostOriginalSender() const { - if (!history()->peer->isMegagroup()) { - return nullptr; - } - if (const auto forwarded = Get()) { - const auto from = forwarded->savedFromPeer; - if (const auto result = from ? from->asChannel() : nullptr) { - return result; - } - } - return nullptr; -} - -bool HistoryMessage::isDiscussionPost() const { - return (discussionPostOriginalSender() != nullptr); -} - -PeerData *HistoryMessage::displayFrom() const { - if (const auto sender = discussionPostOriginalSender()) { - return sender; - } else if (history()->peer->isSelf()) { - return senderOriginal(); - } - return author().get(); -} - bool HistoryMessage::updateDependencyItem() { if (const auto reply = Get()) { return reply->updateData(this, true); diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 454e7147b9..0ab283c427 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -131,13 +131,10 @@ public: [[nodiscard]] bool textHasLinks() const override; [[nodiscard]] int viewsCount() const override; - [[nodiscard]] PeerData *displayFrom() const; bool updateDependencyItem() override; [[nodiscard]] MsgId dependencyMsgId() const override { return replyToId(); } - [[nodiscard]] ChannelData *discussionPostOriginalSender() const; - [[nodiscard]] bool isDiscussionPost() const; // dynamic_cast optimization. [[nodiscard]] HistoryMessage *toHistoryMessage() override { diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 2bd240ab4a..cdd153f5c5 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -6437,10 +6437,8 @@ void HistoryWidget::updateReplyToName() { } const auto from = [&] { const auto item = _replyEditMsg ? _replyEditMsg : _kbReplyTo; - if (const auto message = item->toHistoryMessage()) { - if (const auto from = message->displayFrom()) { - return from; - } + if (const auto from = item->displayFrom()) { + return from; } return item->author().get(); }();