diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index fc45c52c4..a5c1e466a 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -69,6 +69,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 ead0369a9..7d3a53808 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" @@ -55,7 +56,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); @@ -226,6 +226,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 { @@ -1715,6 +1721,10 @@ void StickersListWidget::removeRecentSticker(int section, int index) { } } } + Api::ToggleRecentSticker( + document, + Data::FileOriginStickerSet(Data::Stickers::RecentSetId, 0), + false); if (refresh) { refreshRecentStickers(); updateSelected(); @@ -2072,7 +2082,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 3f501b0d6..7ebedba39 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.h @@ -391,6 +391,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 9eaca3c33..6d69c1acb 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings.cpp @@ -359,6 +359,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 1a7da3e2d..44bf9a196 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp @@ -105,6 +105,38 @@ void SetupKotatoChats( AddSkip(container); AddSubsectionTitle(container, rktr("ktg_settings_chats")); + const auto recentStickersLimitLabel = container->add( + object_ptr( + container, + st::settingsAudioVolumeLabel), + st::settingsAudioVolumeLabelPadding); + const auto recentStickersLimitSlider = container->add( + object_ptr( + container, + st::settingsAudioVolumeSlider), + st::settingsAudioVolumeSliderPadding); + 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::settingsAudioVolumeSlider.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); AddButton(