From b11b5caeb3d9227286b5bab085783f615fe26438 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 2 Nov 2024 17:00:18 +0300 Subject: [PATCH] Moved out unread state values of main list to separated file. --- Telegram/CMakeLists.txt | 2 + .../SourceFiles/data/data_unread_value.cpp | 53 +++++++++++++++++++ Telegram/SourceFiles/data/data_unread_value.h | 28 ++++++++++ .../window/window_filters_menu.cpp | 41 ++------------ 4 files changed, 86 insertions(+), 38 deletions(-) create mode 100644 Telegram/SourceFiles/data/data_unread_value.cpp create mode 100644 Telegram/SourceFiles/data/data_unread_value.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index f8344b94b..a86a14484 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -636,6 +636,8 @@ PRIVATE data/data_thread.h data/data_types.cpp data/data_types.h + data/data_unread_value.cpp + data/data_unread_value.h data/data_user.cpp data/data_user.h data/data_user_photos.cpp diff --git a/Telegram/SourceFiles/data/data_unread_value.cpp b/Telegram/SourceFiles/data/data_unread_value.cpp new file mode 100644 index 000000000..665502979 --- /dev/null +++ b/Telegram/SourceFiles/data/data_unread_value.cpp @@ -0,0 +1,53 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "data/data_unread_value.h" + +#include "data/data_chat_filters.h" +#include "data/data_folder.h" +#include "data/data_session.h" +#include "main/main_session.h" + +namespace Data { +namespace { + +rpl::producer MainListUnreadState( + not_null list) { + return rpl::single(rpl::empty) | rpl::then( + list->unreadStateChanges() | rpl::to_empty + ) | rpl::map([=] { + return list->unreadState(); + }); +} + +} // namespace + +[[nodiscard]] Dialogs::UnreadState MainListMapUnreadState( + not_null session, + const Dialogs::UnreadState &state) { + const auto folderId = Data::Folder::kId; + if (const auto folder = session->data().folderLoaded(folderId)) { + return state - folder->chatsList()->unreadState(); + } + return state; +} + +rpl::producer UnreadStateValue( + not_null session, + FilterId filterId) { + if (filterId > 0) { + const auto filters = &session->data().chatsFilters(); + return MainListUnreadState(filters->chatsList(filterId)); + } + return MainListUnreadState( + session->data().chatsList() + ) | rpl::map([=](const Dialogs::UnreadState &state) { + return MainListMapUnreadState(session, state); + }); +} + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_unread_value.h b/Telegram/SourceFiles/data/data_unread_value.h new file mode 100644 index 000000000..0c60f32ab --- /dev/null +++ b/Telegram/SourceFiles/data/data_unread_value.h @@ -0,0 +1,28 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#pragma once + +namespace Dialogs { +struct UnreadState; +} // namespace Dialogs + +namespace Main { +class Session; +} // namespace Main + +namespace Data { + +[[nodiscard]] Dialogs::UnreadState MainListMapUnreadState( + not_null session, + const Dialogs::UnreadState &state); + +[[nodiscard]] rpl::producer UnreadStateValue( + not_null session, + FilterId filterId); + +} // namespace Data diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index daf217800..5076c2ab6 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_user.h" #include "data/data_peer_values.h" #include "data/data_premium_limits.h" +#include "data/data_unread_value.h" #include "lang/lang_keys.h" #include "ui/filter_icons.h" #include "ui/wrap/vertical_layout.h" @@ -41,42 +42,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_menu_icons.h" namespace Window { -namespace { - -[[nodiscard]] Dialogs::UnreadState MainListMapUnreadState( - not_null session, - const Dialogs::UnreadState &state) { - const auto folderId = Data::Folder::kId; - if (const auto folder = session->data().folderLoaded(folderId)) { - return state - folder->chatsList()->unreadState(); - } - return state; -} - -[[nodiscard]] rpl::producer MainListUnreadState( - not_null list) { - return rpl::single(rpl::empty) | rpl::then( - list->unreadStateChanges() | rpl::to_empty - ) | rpl::map([=] { - return list->unreadState(); - }); -} - -[[nodiscard]] rpl::producer UnreadStateValue( - not_null session, - FilterId filterId) { - if (filterId > 0) { - const auto filters = &session->data().chatsFilters(); - return MainListUnreadState(filters->chatsList(filterId)); - } - return MainListUnreadState( - session->data().chatsList() - ) | rpl::map([=](const Dialogs::UnreadState &state) { - return MainListMapUnreadState(session, state); - }); -} - -} // namespace FiltersMenu::FiltersMenu( not_null parent, @@ -310,7 +275,7 @@ base::unique_qptr FiltersMenu::prepareButton( raw->setIconOverride(icons.normal, icons.active); if (id >= 0) { rpl::combine( - UnreadStateValue(&_session->session(), id), + Data::UnreadStateValue(&_session->session(), id), _includeMuted.value() ) | rpl::start_with_next([=]( const Dialogs::UnreadState &state, @@ -431,7 +396,7 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { } else { auto customUnreadState = [=] { const auto session = &_session->session(); - return MainListMapUnreadState( + return Data::MainListMapUnreadState( session, session->data().chatsList()->unreadState()); };