diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index 1863fc288..9f12f3407 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -244,6 +244,14 @@ bool Media::forwardedBecomesUnread() const { return false; } +bool Media::dropForwardedInfo() const { + return false; +} + +bool Media::forceForwardedInfo() const { + return false; +} + QString Media::errorTextForForward(not_null peer) const { return QString(); } @@ -625,6 +633,10 @@ bool MediaFile::forwardedBecomesUnread() const { || _document->isVideoMessage(); } +bool MediaFile::dropForwardedInfo() const { + return _document->isSong(); +} + QString MediaFile::errorTextForForward(not_null peer) const { if (const auto sticker = _document->sticker()) { if (const auto error = Data::RestrictionError( @@ -1140,6 +1152,10 @@ QString MediaGame::errorTextForForward(not_null peer) const { ).value_or(QString()); } +bool MediaGame::dropForwardedInfo() const { + return true; +} + bool MediaGame::consumeMessageText(const TextWithEntities &text) { _consumedText = text; return true; @@ -1347,6 +1363,10 @@ TextForMimeData MediaDice::clipboardText() const { return { notificationText() }; } +bool MediaDice::forceForwardedInfo() const { + return true; +} + bool MediaDice::updateInlineResultMedia(const MTPMessageMedia &media) { return updateSentMedia(media); } diff --git a/Telegram/SourceFiles/data/data_media_types.h b/Telegram/SourceFiles/data/data_media_types.h index b99cdd065..1549328b2 100644 --- a/Telegram/SourceFiles/data/data_media_types.h +++ b/Telegram/SourceFiles/data/data_media_types.h @@ -102,6 +102,8 @@ public: virtual bool allowsEditMedia() const; virtual bool allowsRevoke(TimeId now) const; virtual bool forwardedBecomesUnread() const; + virtual bool dropForwardedInfo() const; + virtual bool forceForwardedInfo() const; virtual QString errorTextForForward(not_null peer) const; [[nodiscard]] virtual bool consumeMessageText( @@ -191,6 +193,7 @@ public: bool allowsEditCaption() const override; bool allowsEditMedia() const override; bool forwardedBecomesUnread() const override; + bool dropForwardedInfo() const override; QString errorTextForForward(not_null peer) const override; bool updateInlineResultMedia(const MTPMessageMedia &media) override; @@ -352,6 +355,7 @@ public: QString pinnedTextSubstring() const override; TextForMimeData clipboardText() const override; QString errorTextForForward(not_null peer) const override; + bool dropForwardedInfo() const override; bool consumeMessageText(const TextWithEntities &text) override; TextWithEntities consumedMessageText() const override; @@ -442,6 +446,8 @@ public: QString notificationText() const override; QString pinnedTextSubstring() const override; TextForMimeData clipboardText() const override; + bool forceForwardedInfo() const override; + bool updateInlineResultMedia(const MTPMessageMedia &media) override; bool updateSentMedia(const MTPMessageMedia &media) override; std::unique_ptr createView( diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 082705d50..e26657459 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -562,8 +562,14 @@ HistoryMessage::HistoryMessage( auto config = CreateConfig(); - if (original->Has() || !original->history()->peer->isSelf()) { - // Server doesn't add "fwd_from" to non-forwarded messages from chat with yourself. + const auto originalMedia = original->media(); + const auto dropForwardInfo = (originalMedia + && originalMedia->dropForwardedInfo()) + || (original->history()->peer->isSelf() + && !history->peer->isSelf() + && !original->Has() + && (!originalMedia || !originalMedia->forceForwardedInfo())); + if (!dropForwardInfo) { config.originalDate = original->dateOriginal(); if (const auto info = original->hiddenForwardedInfo()) { config.senderNameOriginal = info->name; @@ -595,6 +601,12 @@ HistoryMessage::HistoryMessage( } if (const auto fwdViaBot = original->viaBot()) { config.viaBotId = peerToUser(fwdViaBot->id); + } else if (originalMedia && originalMedia->game()) { + if (const auto user = original->history()->peer->asUser()) { + if (user->isBot()) { + config.viaBotId = peerToUser(user->id); + } + } } const auto fwdViewsCount = original->viewsCount(); if (fwdViewsCount > 0) { diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 66e99e6dd..0bf1cc8ae 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -2128,10 +2128,8 @@ bool Message::displayForwardedFrom() const { return false; } } - const auto media = this->media(); - return !media - || !media->isDisplayed() - || !media->hideForwardedFrom(); + const auto media = item->media(); + return !media || !media->dropForwardedInfo(); } return false; } diff --git a/Telegram/SourceFiles/history/view/media/history_view_document.cpp b/Telegram/SourceFiles/history/view/media/history_view_document.cpp index 5244dc954..839aa0d2c 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_document.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_document.cpp @@ -950,10 +950,6 @@ QMargins Document::bubbleMargins() const { return QMargins(padding.left(), padding.top(), padding.left(), padding.bottom()); } -bool Document::hideForwardedFrom() const { - return _data->isSong(); -} - QSize Document::sizeForGroupingOptimal(int maxWidth) const { const auto thumbed = Get(); const auto &st = (thumbed ? st::msgFileThumbLayoutGrouped : st::msgFileLayoutGrouped); diff --git a/Telegram/SourceFiles/history/view/media/history_view_document.h b/Telegram/SourceFiles/history/view/media/history_view_document.h index e438d30ec..6cc148cb4 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_document.h +++ b/Telegram/SourceFiles/history/view/media/history_view_document.h @@ -60,7 +60,6 @@ public: return false; } QMargins bubbleMargins() const override; - bool hideForwardedFrom() const override; QSize sizeForGroupingOptimal(int maxWidth) const override; QSize sizeForGrouping(int width) const override; diff --git a/Telegram/SourceFiles/history/view/media/history_view_media.h b/Telegram/SourceFiles/history/view/media/history_view_media.h index d4308af06..5dc2a84f1 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media.h @@ -202,9 +202,6 @@ public: [[nodiscard]] virtual QMargins bubbleMargins() const { return QMargins(); } - [[nodiscard]] virtual bool hideForwardedFrom() const { - return false; - } [[nodiscard]] virtual bool overrideEditedDate() const { return false; diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp index cae044ace..721684fb0 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp @@ -695,10 +695,6 @@ bool GroupedMedia::needsBubble() const { return _needBubble; } -bool GroupedMedia::hideForwardedFrom() const { - return main()->hideForwardedFrom(); -} - bool GroupedMedia::computeNeedBubble() const { if (!_caption.isEmpty() || _mode == Mode::Column) { return true; diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.h b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.h index 6d2692b20..442f9a5b1 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.h @@ -91,7 +91,6 @@ public: bool customHighlight() const override { return true; } - bool hideForwardedFrom() const override; void stopAnimation() override; void checkAnimation() override;