diff --git a/Telegram/SourceFiles/iv/iv_cached_media.cpp b/Telegram/SourceFiles/iv/iv_cached_media.cpp index e6154df38a..857f1b1258 100644 --- a/Telegram/SourceFiles/iv/iv_cached_media.cpp +++ b/Telegram/SourceFiles/iv/iv_cached_media.cpp @@ -1462,7 +1462,10 @@ auto CachedPageMediaRuntime::hostedMediaBlockFactory() const const auto medias = std::make_shared< std::vector>>(); medias->reserve(prepared.items.size()); - for (const auto &item : prepared.items) { + for (auto i = 0, count = int(prepared.items.size()) + ; i != count + ; ++i) { + const auto &item = prepared.items[i]; const auto kind = item.media.kind; if (kind == Markdown::PreparedMediaItemKind::Photo) { const auto photo = session->data().photo( @@ -1482,6 +1485,7 @@ auto CachedPageMediaRuntime::hostedMediaBlockFactory() const photo, origin, host->item()->fullId())); + descriptor.groupedItemIndices.emplace(photo->id, i); } else { const auto document = session->data().document( DocumentId(item.media.id)); @@ -1504,6 +1508,7 @@ auto CachedPageMediaRuntime::hostedMediaBlockFactory() const document, origin, host->item()->fullId())); + descriptor.groupedItemIndices.emplace(document->id, i); } if (!medias->back()->canBeGrouped()) { return std::shared_ptr(); diff --git a/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.cpp b/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.cpp index 2554a96806..fc6c808959 100644 --- a/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.cpp +++ b/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.cpp @@ -227,6 +227,7 @@ private: const base::flat_map< uint64, std::shared_ptr> _groupedDocumentRuntimes; + const base::flat_map _groupedItemIndices; const std::shared_ptr _host; const std::vector> _keepAlive; std::unique_ptr _media; @@ -246,6 +247,7 @@ IvHistoryViewBlock::IvHistoryViewBlock( , _documentRuntime(std::move(descriptor.document)) , _groupedPhotoRuntimes(std::move(descriptor.groupedPhotos)) , _groupedDocumentRuntimes(std::move(descriptor.groupedDocuments)) +, _groupedItemIndices(std::move(descriptor.groupedItemIndices)) , _host(std::move(descriptor.host)) , _keepAlive(std::move(descriptor.keepAlive)) { if (descriptor.mediaFactory) { @@ -427,6 +429,11 @@ IvHistoryViewHit IvHistoryViewBlock::classifyHandler( if (i != end(_groupedPhotoRuntimes)) { result.activation.kind = MediaActivationKind::Photo; result.activation.photo = i->second; + const auto j = _groupedItemIndices.find( + photoOpen->photo()->id); + if (j != end(_groupedItemIndices)) { + result.activation.itemIndex = j->second; + } return result; } } else if (const auto documentOpen @@ -436,6 +443,11 @@ IvHistoryViewHit IvHistoryViewBlock::classifyHandler( if (i != end(_groupedDocumentRuntimes)) { result.activation.kind = MediaActivationKind::Document; result.activation.document = i->second; + const auto j = _groupedItemIndices.find( + documentOpen->document()->id); + if (j != end(_groupedItemIndices)) { + result.activation.itemIndex = j->second; + } return result; } } diff --git a/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.h b/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.h index 1a384138e1..4940b78704 100644 --- a/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.h +++ b/Telegram/SourceFiles/iv/markdown/iv_markdown_history_view_media.h @@ -92,6 +92,7 @@ struct IvHistoryViewMediaDescriptor { base::flat_map< uint64, std::shared_ptr> groupedDocuments; + base::flat_map groupedItemIndices; }; class IvHistoryViewMediaBlockFactory final : public HostedMediaBlockFactory {