diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 5627225fd4..08c0e6360e 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -553,18 +553,30 @@ int HistoryMessage::viewsCount() const { return HistoryItem::viewsCount(); } -bool HistoryMessage::displayForwardedAsOriginal() const { - if (const auto forwarded = Get()) { - const auto peer = history()->peer; - return peer->isSelf() || (peer->isMegagroup() && (peer == from())); +ChannelData *HistoryMessage::discussionPostOriginalSender() const { + if (!history()->peer->isMegagroup()) { + return nullptr; } - return false; + 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 { - return displayForwardedAsOriginal() - ? senderOriginal() - : author().get(); + if (const auto sender = discussionPostOriginalSender()) { + return sender; + } else if (history()->peer->isSelf()) { + return senderOriginal(); + } + return author().get(); } bool HistoryMessage::updateDependencyItem() { @@ -611,8 +623,7 @@ bool HistoryMessage::allowsForward() const { } bool HistoryMessage::hasMessageBadge() const { - return hasAdminBadge() - || (displayForwardedAsOriginal() && !history()->peer->isSelf()); + return hasAdminBadge() || isDiscussionPost(); } bool HistoryMessage::isTooOldForEdit(TimeId now) const { diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 3c69810244..454e7147b9 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -136,7 +136,8 @@ public: [[nodiscard]] MsgId dependencyMsgId() const override { return replyToId(); } - [[nodiscard]] bool displayForwardedAsOriginal() const; + [[nodiscard]] ChannelData *discussionPostOriginalSender() const; + [[nodiscard]] bool isDiscussionPost() const; // dynamic_cast optimization. [[nodiscard]] HistoryMessage *toHistoryMessage() override { diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index a6f212165b..5f62b5c5b4 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/toast/toast.h" #include "data/data_session.h" #include "data/data_user.h" +#include "data/data_channel.h" #include "lang/lang_keys.h" #include "mainwidget.h" #include "mainwindow.h" @@ -1337,9 +1338,15 @@ bool Message::displayFromName() const { bool Message::displayForwardedFrom() const { const auto item = message(); - if (item->displayForwardedAsOriginal()) { + if (item->history()->peer->isSelf()) { return false; - } else if (const auto forwarded = item->Get()) { + } + if (const auto forwarded = item->Get()) { + if (const auto sender = item->discussionPostOriginalSender()) { + if (sender == forwarded->originalSender) { + return false; + } + } const auto media = this->media(); return item->Has() || !media