diff --git a/Telegram/SourceFiles/data/data_download_manager.cpp b/Telegram/SourceFiles/data/data_download_manager.cpp index c40085968..79db0acad 100644 --- a/Telegram/SourceFiles/data/data_download_manager.cpp +++ b/Telegram/SourceFiles/data/data_download_manager.cpp @@ -124,6 +124,15 @@ DownloadManager::DownloadManager() DownloadManager::~DownloadManager() = default; +bool DownloadManager::empty() const { + for (const auto &[session, data] : _sessions) { + if (!data.downloading.empty() || !data.downloaded.empty()) { + return false; + } + } + return true; +} + void DownloadManager::trackSession(not_null session) { auto &data = _sessions.emplace(session, SessionData()).first->second; data.downloaded = deserialize(session); diff --git a/Telegram/SourceFiles/data/data_download_manager.h b/Telegram/SourceFiles/data/data_download_manager.h index bb031c62e..8ef078b30 100644 --- a/Telegram/SourceFiles/data/data_download_manager.h +++ b/Telegram/SourceFiles/data/data_download_manager.h @@ -80,6 +80,8 @@ public: DownloadManager(); ~DownloadManager(); + [[nodiscard]] bool empty() const; + void trackSession(not_null session); void itemVisibilitiesUpdated(not_null session); diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp index dc61f35cb..03b9a385c 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp @@ -12,11 +12,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/unixtime.h" #include "base/qt/qt_key_modifiers.h" #include "boxes/peer_list_box.h" +#include "core/application.h" #include "data/components/recent_peers.h" #include "data/components/top_peers.h" #include "data/data_changes.h" #include "data/data_channel.h" #include "data/data_chat.h" +#include "data/data_download_manager.h" #include "data/data_folder.h" #include "data/data_peer_values.h" #include "data/data_session.h" @@ -1305,18 +1307,7 @@ Suggestions::Suggestions( , _tabs( _tabsScroll->setOwnedWidget( object_ptr(this, st::dialogsSearchTabs))) -, _tabKeys{ - { Tab::Chats }, - { Tab::Channels }, - { Tab::Apps }, - { Tab::Media, MediaType::Photo }, - { Tab::Media, MediaType::Video }, - { Tab::Downloads }, - { Tab::Media, MediaType::Link }, - { Tab::Media, MediaType::File }, - { Tab::Media, MediaType::MusicFile }, - { Tab::Media, MediaType::RoundVoiceFile }, -} +, _tabKeys(TabKeysFor(controller)) , _chatsScroll(std::make_unique(this)) , _chatsContent( _chatsScroll->setOwnedWidget(object_ptr(this))) @@ -1987,6 +1978,26 @@ float64 Suggestions::shownOpacity() const { return _shownAnimation.value(_hidden ? 0. : 1.); } +std::vector Suggestions::TabKeysFor( + not_null controller) { + auto result = std::vector{ + { Tab::Chats }, + { Tab::Channels }, + { Tab::Apps }, + { Tab::Media, MediaType::Photo }, + { Tab::Media, MediaType::Video }, + { Tab::Downloads }, + { Tab::Media, MediaType::Link }, + { Tab::Media, MediaType::File }, + { Tab::Media, MediaType::MusicFile }, + { Tab::Media, MediaType::RoundVoiceFile }, + }; + if (Core::App().downloadManager().empty()) { + result.erase(ranges::find(result, Key{ Tab::Downloads })); + } + return result; +} + void Suggestions::paintEvent(QPaintEvent *e) { const auto opacity = shownOpacity(); auto color = st::windowBg->c; diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.h b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.h index 25815d221..0d8d1df72 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.h @@ -147,6 +147,9 @@ private: rpl::variable count; }; + [[nodiscard]] static std::vector TabKeysFor( + not_null controller); + void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override;