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 e1eca77aa..a60a5d089 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_grouped.cpp @@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history.h" #include "history/view/history_view_element.h" #include "history/view/history_view_cursor_state.h" +#include "data/data_document.h" #include "data/data_media_types.h" #include "data/data_session.h" #include "storage/storage_shared_media.h" @@ -652,26 +653,53 @@ HistoryMessageEdited *GroupedMedia::displayedEditBadge() const { } void GroupedMedia::updateNeedBubbleState() { - const auto captionItem = [&]() -> HistoryItem* { + using PartPtrOpt = std::optional; + const auto captionPart = [&]() -> PartPtrOpt { if (_mode == Mode::Column) { - return nullptr; + return std::nullopt; } - auto result = (HistoryItem*)nullptr; + auto result = PartPtrOpt(); for (const auto &part : _parts) { if (!part.item->emptyText()) { if (result) { - return nullptr; + return std::nullopt; } else { - result = part.item; + result = ∂ } } } return result; }(); - if (captionItem) { - _caption = createCaption(captionItem); + if (captionPart) { + const auto &part = (*captionPart); + struct Timestamp { + int duration = 0; + QString base; + }; + const auto timestamp = [&]() -> Timestamp { + const auto &document = part->content->getDocument(); + if (!document || document->isAnimation()) { + return {}; + } + const auto duration = document->getDuration(); + return { + .duration = duration, + .base = duration + ? DocumentTimestampLinkBase( + document, + part->item->fullId()) + : QString(), + }; + }(); + _caption = createCaption( + part->item, + timestamp.duration, + timestamp.base); + + _captionItem = part->item; + } else { + _captionItem = nullptr; } - _captionItem = captionItem; _needBubble = computeNeedBubble(); }