From cbe7b5f61b1e9c2bb6b5d4cd6339ff2d20c11579 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 7 Mar 2022 19:52:54 +0400 Subject: [PATCH] Fix finished downloads bar hiding. --- .../data/data_download_manager.cpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/data/data_download_manager.cpp b/Telegram/SourceFiles/data/data_download_manager.cpp index 1d17ec81c5..f257d4cc41 100644 --- a/Telegram/SourceFiles/data/data_download_manager.cpp +++ b/Telegram/SourceFiles/data/data_download_manager.cpp @@ -856,6 +856,9 @@ rpl::producer MakeDownloadBarContent() { std::shared_ptr media; rpl::lifetime downloadTaskLifetime; QImage thumbnail; + + base::has_weak_ptr guard; + bool scheduled = false; Fn push; }; @@ -901,7 +904,7 @@ rpl::producer MakeDownloadBarContent() { return resolveThumbnailRecursive(resolveThumbnailRecursive); }; - state->push = [=, &manager] { + const auto notify = [=, &manager] { auto content = Ui::DownloadBarContent(); auto single = (const Data::DownloadObject*) nullptr; for (const auto id : manager.loadingList()) { @@ -934,11 +937,23 @@ rpl::producer MakeDownloadBarContent() { } consumer.put_next(std::move(content)); }; + state->push = [=] { + if (state->scheduled) { + return; + } + state->scheduled = true; + Ui::PostponeCall(&state->guard, [=] { + state->scheduled = false; + notify(); + }); + }; manager.loadingListChanges( - ) | rpl::start_with_next(state->push, lifetime); + ) | rpl::filter([=] { + return !state->scheduled; + }) | rpl::start_with_next(state->push, lifetime); - state->push(); + notify(); return lifetime; }; }