From d199e16a6e90747fa034eb3d31105d4f7d26ffba Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 6 Dec 2021 15:00:17 +0400 Subject: [PATCH] Load cloud image without active view only once. --- Telegram/SourceFiles/data/data_cloud_file.cpp | 9 ++++++++- Telegram/SourceFiles/data/data_cloud_file.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/data/data_cloud_file.cpp b/Telegram/SourceFiles/data/data_cloud_file.cpp index aa5bfa6c3..f0801e13e 100644 --- a/Telegram/SourceFiles/data/data_cloud_file.cpp +++ b/Telegram/SourceFiles/data/data_cloud_file.cpp @@ -99,13 +99,19 @@ bool CloudImage::failed() const { return (_file.flags & CloudFile::Flag::Failed); } +bool CloudImage::loadedOnce() const { + return (_file.flags & CloudFile::Flag::Loaded); +} + void CloudImage::load(not_null session, FileOrigin origin) { const auto autoLoading = false; const auto finalCheck = [=] { if (const auto active = activeView()) { return !active->image(); + } else if (_file.flags & CloudFile::Flag::Loaded) { + return false; } - return true; + return !(_file.flags & CloudFile::Flag::Loaded); }; const auto done = [=](QImage result) { if (const auto active = activeView()) { @@ -247,6 +253,7 @@ void LoadCloudFile( if (!file.loader || file.loader->cancelled()) { file.flags |= CloudFile::Flag::Cancelled; } else { + file.flags |= CloudFile::Flag::Loaded; done(file); } // NB! file.loader may be in ~FileLoader() already. diff --git a/Telegram/SourceFiles/data/data_cloud_file.h b/Telegram/SourceFiles/data/data_cloud_file.h index a1ccc7afe..56a5e250b 100644 --- a/Telegram/SourceFiles/data/data_cloud_file.h +++ b/Telegram/SourceFiles/data/data_cloud_file.h @@ -31,6 +31,7 @@ struct CloudFile final { enum class Flag : uchar { Cancelled = 0x01, Failed = 0x02, + Loaded = 0x04, }; friend inline constexpr bool is_flag_type(Flag) { return true; }; @@ -73,6 +74,7 @@ public: [[nodiscard]] bool empty() const; [[nodiscard]] bool loading() const; [[nodiscard]] bool failed() const; + [[nodiscard]] bool loadedOnce() const; void load(not_null session, FileOrigin origin); [[nodiscard]] const ImageLocation &location() const; [[nodiscard]] int byteSize() const;