From eec2992be5ed3a3fcb04c2506b77455668dd5b16 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 16 Mar 2022 20:14:50 +0400 Subject: [PATCH] Version 3.6.1: Fix video-from-webpage-preview download. --- .../data/data_download_manager.cpp | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/data/data_download_manager.cpp b/Telegram/SourceFiles/data/data_download_manager.cpp index a127f60b87e4d4..f2d248e71ba4df 100644 --- a/Telegram/SourceFiles/data/data_download_manager.cpp +++ b/Telegram/SourceFiles/data/data_download_manager.cpp @@ -11,6 +11,7 @@ For license and copyright information please follow this link: #include "data/data_photo.h" #include "data/data_document.h" #include "data/data_document_media.h" +#include "data/data_web_page.h" #include "data/data_changes.h" #include "data/data_user.h" #include "data/data_channel.h" @@ -63,6 +64,28 @@ constexpr auto ByDocument = [](const auto &entry) { return 0; } +[[nodiscard]] PhotoData *ItemPhoto(not_null item) { + if (const auto media = item->media()) { + if (const auto page = media->webpage()) { + return page->document ? nullptr : page->photo; + } else if (const auto photo = media->photo()) { + return photo; + } + } + return nullptr; +} + +[[nodiscard]] DocumentData *ItemDocument(not_null item) { + if (const auto media = item->media()) { + if (const auto page = media->webpage()) { + return page->document; + } else if (const auto document = media->document()) { + return document; + } + } + return nullptr; +} + struct DocumentDescriptor { uint64 sessionUniqueId = 0; DocumentId documentId = 0; @@ -219,9 +242,8 @@ void DownloadManager::check( std::vector::iterator i) { auto &entry = *i; - const auto media = entry.object.item->media(); - const auto photo = media ? media->photo() : nullptr; - const auto document = media ? media->document() : nullptr; + const auto photo = ItemPhoto(entry.object.item); + const auto document = ItemDocument(entry.object.item); if (entry.object.photo != photo || entry.object.document != document) { cancel(data, i); return;