From b5f7c798ac946fab68b6c69f041e8c19bf467deb Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Tue, 30 Aug 2022 14:02:39 +0300 Subject: [PATCH] [Option][GUI] Recent stickers limit --- Telegram/Resources/langs/rewrites/en.json | 9 ++++++ .../chat_helpers/stickers_list_widget.cpp | 14 ++++++-- .../chat_helpers/stickers_list_widget.h | 2 ++ .../SourceFiles/kotato/kotato_settings.cpp | 4 +++ .../kotato/kotato_settings_menu.cpp | 32 +++++++++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 48623efb6..22df45af1 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -67,6 +67,15 @@ "ktg_settings_ffmpeg_multithread": "Multithread video decoding", "ktg_settings_ffmpeg_multithread_about": "When enabled, CPU and RAM consumption is higher, video decodes faster. When disabled, CPU and RAM consumption is lower, video decodes slower. The more CPU cores you have, the more RAM consumption you have when this option is enabled. You can set exact number of threads in the JSON configuration file.", "ktg_settings_adaptive_bubbles": "Adaptive bubbles", + "ktg_settings_recent_stickers_limit": { + "zero": "Recent stickers: show {count} stickers", + "one": "Recent stickers: show {count} sticker", + "two": "Recent stickers: show {count} stickers", + "few": "Recent stickers: show {count} stickers", + "many": "Recent stickers: show {count} stickers", + "other": "Recent stickers: show {count} stickers" + }, + "ktg_settings_recent_stickers_limit_none": "Recent stickers: hide all", "ktg_settings_filters": "Folders", "ktg_settings_messages": "Messages", "ktg_settings_chat_id": "Chat ID in profile", diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index 349980b6c..e314d4b4e 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "chat_helpers/stickers_list_widget.h" +#include "kotato/kotato_settings.h" #include "data/data_document.h" #include "data/data_document_media.h" #include "data/data_session.h" @@ -58,7 +59,6 @@ namespace ChatHelpers { namespace { constexpr auto kSearchRequestDelay = 400; -constexpr auto kRecentDisplayLimit = 20; constexpr auto kPreloadOfficialPages = 4; constexpr auto kOfficialLoadLimit = 40; constexpr auto kMinRepaintDelay = crl::time(33); @@ -257,6 +257,12 @@ StickersListWidget::StickersListWidget( ) | rpl::start_with_next([=] { refreshStickers(); }, lifetime()); + + ::Kotato::JsonSettings::Events( + "recent_stickers_limit" + ) | rpl::start_with_next([=] { + refreshStickers(); + }, lifetime()); } rpl::producer StickersListWidget::chosen() const { @@ -1768,6 +1774,10 @@ void StickersListWidget::removeRecentSticker(int section, int index) { } } } + Api::ToggleRecentSticker( + document, + Data::FileOriginStickerSet(Data::Stickers::RecentSetId, 0), + false); if (refresh) { refreshRecentStickers(); updateSelected(); @@ -2090,7 +2100,7 @@ auto StickersListWidget::collectRecentStickers() -> std::vector { _custom.reserve(cloudCount + recent.size() + customCount); auto add = [&](not_null document, bool custom) { - if (result.size() >= kRecentDisplayLimit) { + if (result.size() >= ::Kotato::JsonSettings::GetInt("recent_stickers_limit")) { return; } const auto i = ranges::find(result, document, &Sticker::document); diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h index afde28b81..de84219ca 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h @@ -419,6 +419,8 @@ private: rpl::event_stream<> _scrollUpdated; rpl::event_stream _choosingUpdated; + rpl::lifetime _lifetime; + }; [[nodiscard]] object_ptr MakeConfirmRemoveSetBox( diff --git a/Telegram/SourceFiles/kotato/kotato_settings.cpp b/Telegram/SourceFiles/kotato/kotato_settings.cpp index 78b2c75c3..ec827753c 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings.cpp @@ -332,6 +332,10 @@ const std::map> DefinitionMap { .type = SettingType::IntSetting, .defaultValue = 0, .limitHandler = IntLimitMin(0) }}, + { "recent_stickers_limit", { + .type = SettingType::IntSetting, + .defaultValue = 20, + .limitHandler = IntLimit(0, 200, 20), }}, }; using OldOptionKey = QString; diff --git a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp index 4d221f6b6..495ed7600 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp @@ -107,6 +107,38 @@ void SetupKotatoChats( AddSkip(container); AddSubsectionTitle(container, rktr("ktg_settings_chats")); + const auto recentStickersLimitLabel = container->add( + object_ptr( + container, + st::groupCallDelayLabel), + st::groupCallDelayLabelMargin); + const auto recentStickersLimitSlider = container->add( + object_ptr( + container, + st::defaultContinuousSlider), + st::localStorageLimitMargin); + const auto updateRecentStickersLimitLabel = [=](int value) { + if (value == 0) { + recentStickersLimitLabel->setText( + ktr("ktg_settings_recent_stickers_limit_none")); + } else { + recentStickersLimitLabel->setText( + ktr("ktg_settings_recent_stickers_limit", value, { "count", QString::number(value) })); + } + }; + const auto updateRecentStickersLimitHeight = [=](int value) { + updateRecentStickersLimitLabel(value); + ::Kotato::JsonSettings::Set("recent_stickers_limit", value); + ::Kotato::JsonSettings::Write(); + }; + recentStickersLimitSlider->resize(st::defaultContinuousSlider.seekSize); + recentStickersLimitSlider->setPseudoDiscrete( + 201, + [](int val) { return val; }, + ::Kotato::JsonSettings::GetInt("recent_stickers_limit"), + updateRecentStickersLimitHeight); + updateRecentStickersLimitLabel(::Kotato::JsonSettings::GetInt("recent_stickers_limit")); + SettingsMenuJsonSwitch(ktg_settings_disable_up_edit, disable_up_edit); SettingsMenuJsonSwitch(ktg_settings_always_show_scheduled, always_show_scheduled);