diff --git a/Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp b/Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp index 2aff46067..c03c20c8e 100644 --- a/Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp +++ b/Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp @@ -669,6 +669,11 @@ auto GroupThumbs::createThumb(Key key) key, page->collage, collageKey->index); + } else if (const auto invoice = media->invoice()) { + return createThumb( + key, + *invoice, + collageKey->index); } } } @@ -695,6 +700,23 @@ auto GroupThumbs::createThumb( return createThumb(key, nullptr); } +auto GroupThumbs::createThumb( + Key key, + const Data::Invoice &invoice, + int index) +-> std::unique_ptr { + if (index < 0 || index >= invoice.extendedMedia.size()) { + return createThumb(key, nullptr); + } + const auto &media = invoice.extendedMedia[index]; + if (const auto photo = media->photo()) { + return createThumb(key, photo); + } else if (const auto document = media->document()) { + return createThumb(key, document); + } + return createThumb(key, nullptr); +} + auto GroupThumbs::createThumb(Key key, std::nullptr_t) -> std::unique_ptr { const auto weak = base::make_weak(this); diff --git a/Telegram/SourceFiles/media/view/media_view_group_thumbs.h b/Telegram/SourceFiles/media/view/media_view_group_thumbs.h index b624c985d..ebcdc3737 100644 --- a/Telegram/SourceFiles/media/view/media_view_group_thumbs.h +++ b/Telegram/SourceFiles/media/view/media_view_group_thumbs.h @@ -15,6 +15,10 @@ class SharedMediaWithLastSlice; class UserPhotosSlice; struct WebPageCollage; +namespace Data { +struct Invoice; +} // namespace Data + namespace Main { class Session; } // namespace Main @@ -109,6 +113,10 @@ private: Key key, const WebPageCollage &collage, int index); + std::unique_ptr createThumb( + Key key, + const Data::Invoice &invoice, + int index); std::unique_ptr createThumb(Key key, not_null photo); std::unique_ptr createThumb( Key key, diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 33f08c5a1..0dde74e30 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -2771,7 +2771,7 @@ auto OverlayWidget::sharedMediaType() const using Type = SharedMediaType; if (_message) { if (const auto media = _message->media()) { - if (media->webpage()) { + if (media->webpage() || media->invoice()) { return std::nullopt; } } @@ -2999,6 +2999,14 @@ std::optional OverlayWidget::collageKey() const { return item; } } + } else if (const auto invoice = media->invoice()) { + for (const auto &item : invoice->extendedMedia) { + if (_photo && item->photo() == _photo) { + return _photo; + } else if (_document && item->document() == _document) { + return _document; + } + } } } } @@ -3032,6 +3040,16 @@ void OverlayWidget::validateCollage() { if (const auto media = _message->media()) { if (const auto page = media->webpage()) { _collageData = page->collage; + } else if (const auto invoice = media->invoice()) { + auto &data = *_collageData; + data.items.reserve(invoice->extendedMedia.size()); + for (const auto &item : invoice->extendedMedia) { + if (const auto photo = item->photo()) { + data.items.push_back(photo); + } else if (const auto document = item->document()) { + data.items.push_back(document); + } + } } } }