diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index e6ecdb20b..202a92bf5 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -1538,6 +1538,21 @@ Data::FileOrigin OverlayWidget::fileOrigin() const { return Data::FileOrigin(); } +Data::FileOrigin OverlayWidget::fileOrigin(const Entity &entity) const { + if (const auto item = entity.item) { + return item->fullId(); + } else if (!entity.data.is>()) { + return Data::FileOrigin(); + } + const auto photo = entity.data.get_unchecked>(); + if (_user) { + return Data::FileOriginUserPhoto(_user->bareId(), photo->id); + } else if (_peer && _peer->userpicPhotoId() == photo->id) { + return Data::FileOriginPeerPhoto(_peer->id); + } + return Data::FileOrigin(); +} + bool OverlayWidget::validSharedMedia() const { if (auto key = sharedMediaKey()) { if (!_sharedMedia) { @@ -3413,16 +3428,17 @@ OverlayWidget::Entity OverlayWidget::entityByIndex(int index) const { return { std::nullopt, nullptr }; } -void OverlayWidget::setContext(base::optional_variant< +void OverlayWidget::setContext( + base::optional_variant< not_null, not_null> context) { - if (auto item = base::get_if>(&context)) { + if (const auto item = base::get_if>(&context)) { _msgid = (*item)->fullId(); _canForwardItem = (*item)->allowsForward(); _canDeleteItem = (*item)->canDelete(); _history = (*item)->history(); _peer = _history->peer; - } else if (auto peer = base::get_if>(&context)) { + } else if (const auto peer = base::get_if>(&context)) { _msgid = FullMsgId(); _canForwardItem = _canDeleteItem = false; _history = (*peer)->owner().history(*peer); @@ -3491,15 +3507,15 @@ void OverlayWidget::preloadData(int delta) { auto entity = entityByIndex(index); if (auto photo = base::get_if>(&entity.data)) { const auto [i, ok] = photos.emplace((*photo)->createMediaView()); - (*i)->wanted(Data::PhotoSize::Small, fileOrigin()); - (*photo)->load(fileOrigin(), LoadFromCloudOrLocal, true); + (*i)->wanted(Data::PhotoSize::Small, fileOrigin(entity)); + (*photo)->load(fileOrigin(entity), LoadFromCloudOrLocal, true); } else if (auto document = base::get_if>( &entity.data)) { const auto [i, ok] = documents.emplace( (*document)->createMediaView()); - (*i)->thumbnailWanted(fileOrigin()); + (*i)->thumbnailWanted(fileOrigin(entity)); if (!(*i)->canBePlayed()) { - (*i)->automaticLoad(fileOrigin(), entity.item); + (*i)->automaticLoad(fileOrigin(entity), entity.item); } } } diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h index 5ccabe462..34c2673cf 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h @@ -239,7 +239,8 @@ private: bool validCollage() const; void validateCollage(); - Data::FileOrigin fileOrigin() const; + [[nodiscard]] Data::FileOrigin fileOrigin() const; + [[nodiscard]] Data::FileOrigin fileOrigin(const Entity& entity) const; void refreshFromLabel(HistoryItem *item); void refreshCaption(HistoryItem *item);