From 57b0ec0d7e40e74756f5a3cf706f6b164c2144d2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 4 Aug 2022 20:39:40 +0300 Subject: [PATCH] Fix forwarded message with custom emoji preview. --- Telegram/SourceFiles/history/history_item.cpp | 10 ++++++++ Telegram/SourceFiles/history/history_item.h | 1 + .../SourceFiles/history/history_message.cpp | 24 ++++++++++++++----- .../SourceFiles/history/history_message.h | 1 + .../SourceFiles/history/history_widget.cpp | 10 +++++++- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index eac25a0ed..0979d422d 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -667,6 +667,7 @@ void HistoryItem::applySentMessage(const MTPDmessage &data) { setPostAuthor(data.vpost_author().value_or_empty()); contributeToSlowmode(data.vdate().v); indexAsNewItem(); + invalidateChatListEntry(); history()->owner().notifyItemDataChange(this); history()->owner().requestItemTextRefresh(this); history()->owner().updateDependentMessages(this); @@ -686,6 +687,7 @@ void HistoryItem::applySentMessage( if (!wasAlready) { indexAsNewItem(); } + invalidateChatListEntry(); } void HistoryItem::indexAsNewItem() { @@ -1035,6 +1037,14 @@ Data::MessagePosition HistoryItem::position() const { return { .fullId = fullId(), .date = date() }; } +bool HistoryItem::computeDropForwardedInfo() const { + const auto media = this->media(); + return (media && media->dropForwardedInfo()) + || (history()->peer->isSelf() + && !Has() + && (!media || !media->forceForwardedInfo())); +} + MsgId HistoryItem::replyToId() const { if (const auto reply = Get()) { return reply->replyToId(); diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index 54a3298a5..96d25e988 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -395,6 +395,7 @@ public: [[nodiscard]] Data::Media *media() const { return _media.get(); } + [[nodiscard]] bool computeDropForwardedInfo() const; virtual void setText(const TextWithEntities &textWithEntities) { } [[nodiscard]] virtual bool textHasLinks() const { diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 09291fba6..149dfa3cd 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -239,6 +239,16 @@ QString GetErrorTextForSending( return GetErrorTextForSending(peer, items, {}, ignoreSlowmodeCountdown); } +TextWithEntities DropCustomEmoji(TextWithEntities text) { + text.entities.erase( + ranges::remove( + text.entities, + EntityType::CustomEmoji, + &EntityInText::type), + text.entities.end()); + return text; +} + struct HistoryMessage::CreateConfig { PeerId replyToPeer = 0; MsgId replyTo = 0; @@ -401,11 +411,7 @@ HistoryMessage::HistoryMessage( auto config = CreateConfig(); const auto originalMedia = original->media(); - const auto dropForwardInfo = (originalMedia - && originalMedia->dropForwardedInfo()) - || (original->history()->peer->isSelf() - && !original->Has() - && (!originalMedia || !originalMedia->forceForwardedInfo())); + const auto dropForwardInfo = original->computeDropForwardedInfo(); if (!dropForwardInfo) { config.originalDate = original->dateOriginal(); if (const auto info = original->hiddenSenderInfo()) { @@ -473,7 +479,13 @@ HistoryMessage::HistoryMessage( if (mediaOriginal && !ignoreMedia()) { _media = mediaOriginal->clone(this); } - setText(original->originalText()); + + const auto dropCustomEmoji = dropForwardInfo + && !history->session().premium() + && !history->peer->isSelf(); + setText(dropCustomEmoji + ? DropCustomEmoji(original->originalText()) + : original->originalText()); } HistoryMessage::HistoryMessage( diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 9acaa4bda..5754fca77 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -49,6 +49,7 @@ void RequestDependentMessageData( const HistoryItemsList &items, const TextWithTags &comment, bool ignoreSlowmodeCountdown = false); +[[nodiscard]] TextWithEntities DropCustomEmoji(TextWithEntities text); class HistoryMessage final : public HistoryItem { public: diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 53d32e13e..284d86d5f 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -7545,11 +7545,19 @@ void HistoryWidget::updateForwardingTexts() { } if (count < 2) { - text = _toForward.items.front()->toPreview({ + const auto item = _toForward.items.front(); + text = item->toPreview({ .hideSender = true, .hideCaption = !keepCaptions, .generateImages = false, }).text; + + const auto dropCustomEmoji = !session().premium() + && !_peer->isSelf() + && (item->computeDropForwardedInfo() || !keepNames); + if (dropCustomEmoji) { + text = DropCustomEmoji(std::move(text)); + } } else { text = Ui::Text::PlainLink( tr::lng_forward_messages(tr::now, lt_count, count));