diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index 7ff64716bb..82c1c996cb 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -343,6 +343,10 @@ public: [[nodiscard]] virtual TextWithEntities originalText() const { return TextWithEntities(); } + [[nodiscard]] virtual auto originalTextWithLocalEntities() const + -> TextWithEntities { + return TextWithEntities(); + } [[nodiscard]] virtual TextForMimeData clipboardText() const { return TextForMimeData(); } diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 12c250fd87..aeb8c2ab7d 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -1536,19 +1536,31 @@ Storage::SharedMediaTypesMask HistoryMessage::sharedMediaTypes() const { } bool HistoryMessage::generateLocalEntitiesByReply() const { + using namespace HistoryView; if (!_media) { return true; + } else if (const auto document = _media->document()) { + return !DurationForTimestampLinks(document); } else if (const auto webpage = _media->webpage()) { - return !webpage->document && webpage->type != WebPageType::Video; + return (webpage->type != WebPageType::Video) + && !DurationForTimestampLinks(webpage); } - return false; + return true; } TextWithEntities HistoryMessage::withLocalEntities( const TextWithEntities &textWithEntities) const { using namespace HistoryView; if (!generateLocalEntitiesByReply()) { - if (const auto webpage = _media ? _media->webpage() : nullptr) { + if (!_media) { + } else if (const auto document = _media->document()) { + if (const auto duration = DurationForTimestampLinks(document)) { + return AddTimestampLinks( + textWithEntities, + duration, + TimestampLinkBase(document, fullId())); + } + } else if (const auto webpage = _media->webpage()) { if (const auto duration = DurationForTimestampLinks(webpage)) { return AddTimestampLinks( textWithEntities, @@ -1712,6 +1724,10 @@ TextWithEntities HistoryMessage::originalText() const { return _text.toTextWithEntities(); } +TextWithEntities HistoryMessage::originalTextWithLocalEntities() const { + return withLocalEntities(originalText()); +} + TextForMimeData HistoryMessage::clipboardText() const { if (emptyText()) { return TextForMimeData(); diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 1c78886663..7611933e58 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -173,6 +173,8 @@ public: void setText(const TextWithEntities &textWithEntities) override; [[nodiscard]] Ui::Text::IsolatedEmoji isolatedEmoji() const override; [[nodiscard]] TextWithEntities originalText() const override; + [[nodiscard]] auto originalTextWithLocalEntities() const + -> TextWithEntities override; [[nodiscard]] TextForMimeData clipboardText() const override; [[nodiscard]] bool textHasLinks() const override; diff --git a/Telegram/SourceFiles/history/view/media/history_view_document.cpp b/Telegram/SourceFiles/history/view/media/history_view_document.cpp index 93b1bdd8d9..7c94afd1ea 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_document.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_document.cpp @@ -1084,14 +1084,7 @@ TextWithEntities Document::getCaption() const { } Ui::Text::String Document::createCaption() { - const auto timestampLinksDuration = DurationForTimestampLinks(_data); - const auto timestampLinkBase = timestampLinksDuration - ? TimestampLinkBase(_data, _realParent->fullId()) - : QString(); - return File::createCaption( - _realParent, - timestampLinksDuration, - timestampLinkBase); + return File::createCaption(_realParent); } bool DrawThumbnailAsSongCover( diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp index 8d8d7119b2..530427fa4f 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp @@ -1322,14 +1322,7 @@ void Gif::refreshParentId(not_null realParent) { } void Gif::refreshCaption() { - const auto timestampLinksDuration = DurationForTimestampLinks(_data); - const auto timestampLinkBase = timestampLinksDuration - ? TimestampLinkBase(_data, _realParent->fullId()) - : QString(); - _caption = createCaption( - _parent->data(), - timestampLinksDuration, - timestampLinkBase); + _caption = createCaption(_parent->data()); } int Gif::additionalWidth(const HistoryMessageVia *via, const HistoryMessageReply *reply, const HistoryMessageForwarded *forwarded) const { diff --git a/Telegram/SourceFiles/history/view/media/history_view_media.cpp b/Telegram/SourceFiles/history/view/media/history_view_media.cpp index 5e3cebf773..e97caa0507 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media.cpp @@ -64,7 +64,7 @@ QString TimestampLinkBase( TimeId DurationForTimestampLinks(not_null webpage) { if (!webpage->collage.items.empty()) { - return false; + return 0; } else if (const auto document = webpage->document) { return DurationForTimestampLinks(document); } else if (webpage->type != WebPageType::Video @@ -185,12 +185,7 @@ QSize Media::countCurrentSize(int newWidth) { return QSize(qMin(newWidth, maxWidth()), minHeight()); } -Ui::Text::String Media::createCaption( - not_null item, - TimeId timestampLinksDuration, - const QString ×tampLinkBase) const { - Expects(timestampLinksDuration >= 0); - +Ui::Text::String Media::createCaption(not_null item) const { if (item->emptyText()) { return {}; } @@ -203,12 +198,7 @@ Ui::Text::String Media::createCaption( }; result.setMarkedText( st::messageTextStyle, - (timestampLinksDuration - ? AddTimestampLinks( - item->originalText(), - timestampLinksDuration, - timestampLinkBase) - : item->originalText()), + item->originalTextWithLocalEntities(), Ui::ItemTextOptions(item), context); if (const auto width = _parent->skipBlockWidth()) { diff --git a/Telegram/SourceFiles/history/view/media/history_view_media.h b/Telegram/SourceFiles/history/view/media/history_view_media.h index 7b39017ea0..139e26f0ae 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media.h @@ -297,9 +297,7 @@ public: protected: [[nodiscard]] QSize countCurrentSize(int newWidth) override; [[nodiscard]] Ui::Text::String createCaption( - not_null item, - TimeId timestampLinksDuration = 0, - const QString ×tampLinkBase = QString()) const; + not_null item) const; virtual void playAnimation(bool autoplay) { } 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 aa26f92f22..5d677bef99 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp @@ -672,28 +672,7 @@ void GroupedMedia::updateNeedBubbleState() { }(); if (captionPart) { const auto &part = (*captionPart); - struct Timestamp { - int duration = 0; - QString base; - }; - const auto timestamp = [&]() -> Timestamp { - const auto document = part->content->getDocument(); - const auto duration = document - ? DurationForTimestampLinks(document) - : TimeId(0); - if (!duration) { - return {}; - } - return { - .duration = duration, - .base = TimestampLinkBase(document, part->item->fullId()), - }; - }(); - _caption = createCaption( - part->item, - timestamp.duration, - timestamp.base); - + _caption = createCaption(part->item); _captionItem = part->item; } else { _captionItem = nullptr;