Fix finished downloads bar hiding.

This commit is contained in:
John Preston 2022-03-07 19:52:54 +04:00
parent bde79210ca
commit cbe7b5f61b

View file

@ -856,6 +856,9 @@ rpl::producer<Ui::DownloadBarContent> MakeDownloadBarContent() {
std::shared_ptr<Data::DocumentMedia> media; std::shared_ptr<Data::DocumentMedia> media;
rpl::lifetime downloadTaskLifetime; rpl::lifetime downloadTaskLifetime;
QImage thumbnail; QImage thumbnail;
base::has_weak_ptr guard;
bool scheduled = false;
Fn<void()> push; Fn<void()> push;
}; };
@ -901,7 +904,7 @@ rpl::producer<Ui::DownloadBarContent> MakeDownloadBarContent() {
return resolveThumbnailRecursive(resolveThumbnailRecursive); return resolveThumbnailRecursive(resolveThumbnailRecursive);
}; };
state->push = [=, &manager] { const auto notify = [=, &manager] {
auto content = Ui::DownloadBarContent(); auto content = Ui::DownloadBarContent();
auto single = (const Data::DownloadObject*) nullptr; auto single = (const Data::DownloadObject*) nullptr;
for (const auto id : manager.loadingList()) { for (const auto id : manager.loadingList()) {
@ -934,11 +937,23 @@ rpl::producer<Ui::DownloadBarContent> MakeDownloadBarContent() {
} }
consumer.put_next(std::move(content)); 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( 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; return lifetime;
}; };
} }