From 115517fae15a4d27a9b421f156c508286d39a910 Mon Sep 17 00:00:00 2001 From: ZavaruKitsu Date: Tue, 2 Jan 2024 03:09:55 +0300 Subject: [PATCH] feat: hide folder notification counters --- Telegram/Resources/langs/lang.strings | 5 +- Telegram/SourceFiles/ayu/ayu_settings.cpp | 9 +- Telegram/SourceFiles/ayu/ayu_settings.h | 16 +- .../ayu/ui/settings/settings_ayu.cpp | 264 ++++++++++-------- .../ayu/ui/settings/settings_ayu.h | 34 --- .../window/window_filters_menu.cpp | 11 +- 6 files changed, 181 insertions(+), 158 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index db9eeb97e..1239b9620 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -4623,9 +4623,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_MaximumMediaSizeCellular" = "Media size limit (cellular data)"; "ayu_MaximumMediaSizeWiFi" = "Media size limit (WiFi)"; "ayu_MessageSavingOtherHeader" = "Other"; -"ayu_MessageSavingSaveFormatting" = "Save formatting"; "ayu_MessageSavingSaveReactions" = "Save reactions"; "ayu_MessageSavingSaveForBots" = "Save in bot dialogs"; +"ayu_MessageSavingSavePath" = "Attachments folder"; +"ayu_MessageSavingSavePathTitle" = "Choose folder"; "ayu_SpyAllToggle" = "Spy on people"; "ayu_SpySaveReadMarks" = "Save read date"; "ayu_SpySaveLastActivity" = "Save last activity"; @@ -4639,6 +4640,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_CustomizationHeader" = "Customization"; "ayu_DeletedMarkText" = "Deleted mark"; "ayu_EditedMarkText" = "Edited mark"; +"ayu_HideNotificationCounters" = "Hide notification counters"; "ayu_HideAllChats" = "Hide \"All chats\" folder"; "ayu_ShowGhostToggleInDrawer" = "Show ghost mode toggle"; "ayu_ShowKllButtonInDrawer" = "Show kill app button"; @@ -4660,6 +4662,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_RegexFiltersAmount" = "filters"; "ayu_RegexFiltersHeader" = "Filters"; "ayu_RegexFiltersShared" = "Shared filters"; +"ayu_RegexFiltersExcluded" = "Excluded filters"; "ayu_FiltersHideFromBlocked" = "Hide from blocked users"; "ayu_FiltersHideFromBlockedNote" = "Message filters were enabled."; "ayu_RegexFiltersEnableSharedInChats" = "Enable shared filters in chats"; diff --git a/Telegram/SourceFiles/ayu/ayu_settings.cpp b/Telegram/SourceFiles/ayu/ayu_settings.cpp index aac6805d5..8ba23972c 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.cpp +++ b/Telegram/SourceFiles/ayu/ayu_settings.cpp @@ -383,9 +383,9 @@ void AyuGramSettings::set_showPeerId(int val) showPeerIdReactive = val; } -void AyuGramSettings::set_showMessageSeconds(bool val) +void AyuGramSettings::set_hideNotificationCounters(bool val) { - showMessageSeconds = val; + hideNotificationCounters = val; } void AyuGramSettings::set_hideAllChatsFolder(bool val) @@ -393,6 +393,11 @@ void AyuGramSettings::set_hideAllChatsFolder(bool val) hideAllChatsFolder = val; } +void AyuGramSettings::set_showMessageSeconds(bool val) +{ + showMessageSeconds = val; +} + void AyuGramSettings::set_stickerConfirmation(bool val) { stickerConfirmation = val; diff --git a/Telegram/SourceFiles/ayu/ayu_settings.h b/Telegram/SourceFiles/ayu/ayu_settings.h index 86ab535b2..801c01d43 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.h +++ b/Telegram/SourceFiles/ayu/ayu_settings.h @@ -88,14 +88,15 @@ public: mainFont = ""; monoFont = ""; + hideNotificationCounters = false; + hideAllChatsFolder = false; + /* * showPeerId = 0 means no ID shown * showPeerId = 1 means ID shown as for Telegram API devs * showPeerId = 2 means ID shown as for Bot API devs (-100) */ showPeerId = 2; - - hideAllChatsFolder = false; showMessageSeconds = false; // ~ Confirmations @@ -149,8 +150,10 @@ public: QString mainFont; QString monoFont; - int showPeerId; + bool hideNotificationCounters; bool hideAllChatsFolder; + + int showPeerId; bool showMessageSeconds; bool stickerConfirmation; @@ -205,9 +208,11 @@ public: void set_mainFont(QString val); void set_monoFont(QString val); + void set_hideNotificationCounters(bool val); + void set_hideAllChatsFolder(bool val); + void set_showPeerId(int val); void set_showMessageSeconds(bool val); - void set_hideAllChatsFolder(bool val); void set_stickerConfirmation(bool val); void set_gifConfirmation(bool val); @@ -252,9 +257,10 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT( showStreamerToggleInTray, mainFont, monoFont, + hideNotificationCounters, + hideAllChatsFolder, showPeerId, showMessageSeconds, - hideAllChatsFolder, stickerConfirmation, gifConfirmation, voiceConfirmation diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp index 3dd181f16..6717ea9ed 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp @@ -394,7 +394,7 @@ Ayu::Ayu( setupContent(controller); } -void Ayu::SetupGhostModeToggle(not_null container) +void SetupGhostModeToggle(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -441,7 +441,7 @@ void Ayu::SetupGhostModeToggle(not_null container) AddCollapsibleToggle(container, tr::ayu_GhostEssentialsHeader(), checkboxes, true); } -void Ayu::SetupReadAfterActionToggle(not_null container) +void SetupReadAfterActionToggle(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -472,7 +472,7 @@ void Ayu::SetupReadAfterActionToggle(not_null container) AddCollapsibleToggle(container, tr::ayu_MarkReadAfterAction(), checkboxes, false); } -void Ayu::SetupGhostEssentials(not_null container) +void SetupGhostEssentials(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -502,7 +502,7 @@ void Ayu::SetupGhostEssentials(not_null container) }, container->lifetime()); } -void Ayu::SetupSpyEssentials(not_null container) +void SetupSpyEssentials(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -549,7 +549,7 @@ void Ayu::SetupSpyEssentials(not_null container) }, container->lifetime()); } -void Ayu::SetupQoLToggles(not_null container) +void SetupQoLToggles(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -687,113 +687,14 @@ void Ayu::SetupQoLToggles(not_null container) }, container->lifetime()); } -void Ayu::SetupAppIcon(not_null container) +void SetupAppIcon(not_null container) { container->add( object_ptr(container), st::settingsCheckboxPadding); } -void Ayu::SetupCustomization(not_null container, - not_null controller) -{ - auto settings = &AyuSettings::getInstance(); - - AddSubsectionTitle(container, tr::ayu_CustomizationHeader()); - - SetupAppIcon(container); - - AddDivider(container); - AddSkip(container); - - auto btn = AddButtonWithLabel( - container, - tr::ayu_DeletedMarkText(), - AyuSettings::get_deletedMarkReactive(), - st::settingsButtonNoIcon - ); - btn->addClickHandler( - [=]() - { - auto box = Box(); - Ui::show(std::move(box)); - }); - - auto btn2 = AddButtonWithLabel( - container, - tr::ayu_EditedMarkText(), - AyuSettings::get_editedMarkReactive(), - st::settingsButtonNoIcon - ); - btn2->addClickHandler( - [=]() - { - auto box = Box(); - Ui::show(std::move(box)); - }); - - AddSkip(container); - AddDivider(container); - AddSkip(container); - - SetupRecentStickersLimitSlider(container); - - AddSkip(container); - AddDivider(container); - AddSkip(container); - - SetupShowPeerId(container, controller); - - AddButtonWithIcon( - container, - tr::ayu_HideAllChats(), - st::settingsButtonNoIcon - )->toggleOn( - rpl::single(settings->hideAllChatsFolder) - )->toggledValue( - ) | rpl::filter( - [=](bool enabled) - { - return (enabled != settings->hideAllChatsFolder); - }) | start_with_next( - [=](bool enabled) - { - settings->set_hideAllChatsFolder(enabled); - AyuSettings::save(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::ayu_SettingsShowMessageSeconds(), - st::settingsButtonNoIcon - )->toggleOn( - rpl::single(settings->showMessageSeconds) - )->toggledValue( - ) | rpl::filter( - [=](bool enabled) - { - return (enabled != settings->showMessageSeconds); - }) | start_with_next( - [=](bool enabled) - { - settings->set_showMessageSeconds(enabled); - AyuSettings::save(); - }, container->lifetime()); - - AddSkip(container); - AddDivider(container); - SetupContextMenuElements(container, controller); - SetupDrawerElements(container); - AddSkip(container); - AddDivider(container); - SetupTrayElements(container); - AddSkip(container); - AddDivider(container); - AddSkip(container); - SetupFonts(container, controller); -} - -void Ayu::SetupContextMenuElements(not_null container, +void SetupContextMenuElements(not_null container, not_null controller) { auto settings = &AyuSettings::getInstance(); @@ -878,7 +779,7 @@ void Ayu::SetupContextMenuElements(not_null container, AddDividerText(container, tr::ayu_SettingsContextMenuDescription()); } -void Ayu::SetupDrawerElements(not_null container) +void SetupDrawerElements(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -964,7 +865,7 @@ void Ayu::SetupDrawerElements(not_null container) #endif } -void Ayu::SetupTrayElements(not_null container) +void SetupTrayElements(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -1010,7 +911,7 @@ void Ayu::SetupTrayElements(not_null container) #endif } -void Ayu::SetupShowPeerId(not_null container, +void SetupShowPeerId(not_null container, not_null controller) { auto settings = &AyuSettings::getInstance(); @@ -1053,7 +954,7 @@ void Ayu::SetupShowPeerId(not_null container, }); } -void Ayu::SetupRecentStickersLimitSlider(not_null container) +void SetupRecentStickersLimitSlider(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -1095,7 +996,7 @@ void Ayu::SetupRecentStickersLimitSlider(not_null containe }); } -void Ayu::SetupFonts(not_null container, not_null controller) +void SetupFonts(not_null container, not_null controller) { const auto settings = &AyuSettings::getInstance(); @@ -1143,7 +1044,7 @@ void Ayu::SetupFonts(not_null container, not_null container) +void SetupAyuSync(not_null container) { AddSubsectionTitle(container, tr::ayu_AyuSyncHeader()); @@ -1161,7 +1062,7 @@ void Ayu::SetupAyuSync(not_null container) }); } -void Ayu::SetupSendConfirmations(not_null container) +void SetupSendConfirmations(not_null container) { auto settings = &AyuSettings::getInstance(); @@ -1222,7 +1123,142 @@ void Ayu::SetupSendConfirmations(not_null container) }, container->lifetime()); } -void Ayu::SetupAyuGramSettings(not_null container, +void SetupMarks(not_null container) { + auto settings = &AyuSettings::getInstance(); + + AddButtonWithLabel( + container, + tr::ayu_DeletedMarkText(), + AyuSettings::get_deletedMarkReactive(), + st::settingsButtonNoIcon + )->addClickHandler( + [=]() + { + auto box = Box(); + Ui::show(std::move(box)); + }); + + AddButtonWithLabel( + container, + tr::ayu_EditedMarkText(), + AyuSettings::get_editedMarkReactive(), + st::settingsButtonNoIcon + )->addClickHandler( + [=]() + { + auto box = Box(); + Ui::show(std::move(box)); + }); +} + +void SetupFolderSettings(not_null container) { + auto settings = &AyuSettings::getInstance(); + + AddButtonWithIcon( + container, + tr::ayu_HideNotificationCounters(), + st::settingsButtonNoIcon + )->toggleOn( + rpl::single(settings->hideNotificationCounters) + )->toggledValue( + ) | rpl::filter( + [=](bool enabled) + { + return (enabled != settings->hideNotificationCounters); + }) | start_with_next( + [=](bool enabled) + { + settings->set_hideNotificationCounters(enabled); + AyuSettings::save(); + }, container->lifetime()); + + AddButtonWithIcon( + container, + tr::ayu_HideAllChats(), + st::settingsButtonNoIcon + )->toggleOn( + rpl::single(settings->hideAllChatsFolder) + )->toggledValue( + ) | rpl::filter( + [=](bool enabled) + { + return (enabled != settings->hideAllChatsFolder); + }) | start_with_next( + [=](bool enabled) + { + settings->set_hideAllChatsFolder(enabled); + AyuSettings::save(); + }, container->lifetime()); +} + +void SetupNerdSettings(not_null container, not_null controller) { + auto settings = &AyuSettings::getInstance(); + + SetupShowPeerId(container, controller); + + AddButtonWithIcon( + container, + tr::ayu_SettingsShowMessageSeconds(), + st::settingsButtonNoIcon + )->toggleOn( + rpl::single(settings->showMessageSeconds) + )->toggledValue( + ) | rpl::filter( + [=](bool enabled) + { + return (enabled != settings->showMessageSeconds); + }) | start_with_next( + [=](bool enabled) + { + settings->set_showMessageSeconds(enabled); + AyuSettings::save(); + }, container->lifetime()); + +} + +void SetupCustomization(not_null container, + not_null controller) +{ + AddSubsectionTitle(container, tr::ayu_CustomizationHeader()); + + SetupAppIcon(container); + + AddDivider(container); + AddSkip(container); + + SetupMarks(container); + + AddSkip(container); + AddDivider(container); + AddSkip(container); + + SetupRecentStickersLimitSlider(container); + + AddSkip(container); + AddDivider(container); + AddSkip(container); + + SetupFolderSettings(container); + AddSkip(container); + AddDivider(container); + + AddSkip(container); + SetupNerdSettings(container, controller); + + AddSkip(container); + AddDivider(container); + SetupContextMenuElements(container, controller); + SetupDrawerElements(container); + AddSkip(container); + AddDivider(container); + SetupTrayElements(container); + AddSkip(container); + AddDivider(container); + AddSkip(container); + SetupFonts(container, controller); +} + +void SetupAyuGramSettings(not_null container, not_null controller) { AddSkip(container); diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h index f330c2156..b444c10ca 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h @@ -29,40 +29,6 @@ public: [[nodiscard]] rpl::producer title() override; private: - void SetupGhostModeToggle(not_null container); - - void SetupReadAfterActionToggle(not_null container); - - void SetupGhostEssentials(not_null container); - - void SetupSpyEssentials(not_null container); - - void SetupQoLToggles(not_null container); - - void SetupAppIcon(not_null container); - - void SetupCustomization(not_null container, - not_null controller); - - void SetupContextMenuElements(not_null container, - not_null controller); - - void SetupDrawerElements(not_null container); - - void SetupTrayElements(not_null container); - - void SetupShowPeerId(not_null container, not_null controller); - - void SetupRecentStickersLimitSlider(not_null container); - - void SetupFonts(not_null container, not_null controller); - - void SetupAyuSync(not_null container); - - void SetupSendConfirmations(not_null container); - - void SetupAyuGramSettings(not_null container, not_null null); - void setupContent(not_null controller); }; diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index f9e07a476..00713a191 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -313,8 +313,15 @@ base::unique_qptr FiltersMenu::prepareButton( &_session->session(), id ) | rpl::start_with_next([=](const Dialogs::UnreadState &state) { - const auto count = (state.chats + state.marks); - const auto muted = (state.chatsMuted + state.marksMuted); + auto count = (state.chats + state.marks); + auto muted = (state.chatsMuted + state.marksMuted); + + const auto settings = &AyuSettings::getInstance(); + if (settings->hideNotificationCounters) { + count = 0; + muted = 0; + } + const auto string = !count ? QString() : (count > 99)