From 09285bc9cd7c3f8e797bd6af046490b49e650e3b Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 7 Mar 2024 02:27:15 +0300 Subject: [PATCH] Moved out minimal levels of boosts for channel settings to single place. --- .../boxes/background_preview_box.cpp | 15 +--- .../boxes/peers/edit_peer_color_box.cpp | 12 +-- .../boxes/peers/replace_boost_box.cpp | 26 ++++--- Telegram/SourceFiles/boxes/stickers_box.cpp | 9 +-- .../SourceFiles/data/data_premium_limits.cpp | 76 +++++++++++++++++++ .../SourceFiles/data/data_premium_limits.h | 22 ++++++ Telegram/SourceFiles/data/data_session.cpp | 18 ++--- 7 files changed, 129 insertions(+), 49 deletions(-) diff --git a/Telegram/SourceFiles/boxes/background_preview_box.cpp b/Telegram/SourceFiles/boxes/background_preview_box.cpp index 6dadab562..8406657e6 100644 --- a/Telegram/SourceFiles/boxes/background_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/background_preview_box.cpp @@ -31,8 +31,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history_item.h" #include "history/history_item_helpers.h" #include "history/view/history_view_message.h" -#include "main/main_account.h" -#include "main/main_app_config.h" #include "main/main_session.h" #include "apiwrap.h" #include "data/data_session.h" @@ -42,6 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_document_resolver.h" #include "data/data_file_origin.h" #include "data/data_peer_values.h" +#include "data/data_premium_limits.h" #include "settings/settings_premium.h" #include "storage/file_upload.h" #include "storage/localimageloader.h" @@ -699,16 +698,10 @@ void BackgroundPreviewBox::checkLevelForChannel() { if (!weak) { return std::optional(); } - const auto appConfig = &_forPeer->session().account().appConfig(); - const auto defaultRequired = appConfig->get( - "channel_wallpaper_level_min", - 9); - const auto customRequired = appConfig->get( - "channel_custom_wallpaper_level_min", - 10); + const auto limits = Data::LevelLimits(&_forPeer->session()); const auto required = _paperEmojiId.isEmpty() - ? customRequired - : defaultRequired; + ? limits.channelCustomWallpaperLevelMin() + : limits.channelWallpaperLevelMin(); if (level >= required) { applyForPeer(false); return std::optional(); diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp index 2627d2342..e62aaac54 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp @@ -23,6 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_emoji_statuses.h" #include "data/data_file_origin.h" #include "data/data_peer.h" +#include "data/data_premium_limits.h" #include "data/data_session.h" #include "data/data_web_page.h" #include "history/view/history_view_element.h" @@ -34,8 +35,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "lottie/lottie_icon.h" #include "lottie/lottie_single_player.h" -#include "main/main_account.h" -#include "main/main_app_config.h" #include "main/main_session.h" #include "settings/settings_common.h" #include "settings/settings_premium.h" @@ -541,16 +540,13 @@ void Apply( : peerColors->requiredChannelLevelFor( peer->id, values.colorIndex); + const auto limits = Data::LevelLimits(&peer->session()); const auto iconRequired = values.backgroundEmojiId - ? session->account().appConfig().get( - "channel_bg_icon_level_min", - 5) + ? limits.channelBgIconLevelMin() : 0; const auto statusRequired = (values.statusChanged && values.statusId) - ? session->account().appConfig().get( - "channel_emoji_status_level_min", - 8) + ? limits.channelEmojiStatusLevelMin() : 0; const auto required = std::max({ colorRequired, diff --git a/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp b/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp index ef99b3a90..36f18ab23 100644 --- a/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "base/event_filter.h" #include "base/unixtime.h" +#include "data/data_premium_limits.h" #include "boxes/peer_list_box.h" #include "data/data_channel.h" #include "data/data_cloud_themes.h" @@ -447,22 +448,23 @@ Ui::BoostFeatures LookupBoostFeatures(not_null channel) { if (themes.empty()) { channel->owner().cloudThemes().refreshChatThemes(); } + const auto levelLimits = Data::LevelLimits(&channel->session()); return Ui::BoostFeatures{ .nameColorsByLevel = std::move(nameColorsByLevel), .linkStylesByLevel = std::move(linkStylesByLevel), - .linkLogoLevel = get(u"channel_bg_icon_level_min"_q, 4, !group), - .transcribeLevel = get(u"group_transcribe_level_min"_q, 6, group), - .emojiPackLevel = get(u"group_emoji_stickers_level_min"_q, 4, group), - .emojiStatusLevel = get(group - ? u"group_emoji_status_level_min"_q - : u"channel_emoji_status_level_min"_q, 8), - .wallpaperLevel = get(group - ? u"group_wallpaper_level_min"_q - : u"channel_wallpaper_level_min"_q, 9), + .linkLogoLevel = group ? 0 : levelLimits.channelBgIconLevelMin(), + .transcribeLevel = group ? levelLimits.groupTranscribeLevelMin() : 0, + .emojiPackLevel = group ? levelLimits.groupEmojiStickersLevelMin() : 0, + .emojiStatusLevel = group + ? levelLimits.groupEmojiStatusLevelMin() + : levelLimits.channelEmojiStatusLevelMin(), + .wallpaperLevel = group + ? levelLimits.groupWallpaperLevelMin() + : levelLimits.channelWallpaperLevelMin(), .wallpapersCount = themes.empty() ? 8 : int(themes.size()), - .customWallpaperLevel = get(group - ? u"channel_custom_wallpaper_level_min"_q - : u"group_custom_wallpaper_level_min"_q, 10), + .customWallpaperLevel = group + ? levelLimits.groupCustomWallpaperLevelMin() + : levelLimits.channelCustomWallpaperLevelMin(), }; } diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 8a88acfba..7d72ebf5a 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_channel.h" #include "data/data_file_origin.h" #include "data/data_document_media.h" +#include "data/data_premium_limits.h" #include "data/stickers/data_stickers.h" #include "core/application.h" #include "lang/lang_keys.h" @@ -40,8 +41,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/painter.h" #include "ui/unread_badge_paint.h" #include "media/clip/media_clip_reader.h" -#include "main/main_account.h" -#include "main/main_app_config.h" #include "main/main_session.h" #include "styles/style_layers.h" #include "styles/style_boxes.h" @@ -2050,10 +2049,8 @@ void StickersBox::Inner::checkGroupLevel(Fn done) { return std::optional(); } _checkingGroupLevel = false; - const auto appConfig = &peer->session().account().appConfig(); - const auto required = appConfig->get( - "group_emoji_stickers_level_min", - 4); + const auto required = Data::LevelLimits( + &peer->session()).groupEmojiStickersLevelMin(); if (level >= required) { save(); return std::optional(); diff --git a/Telegram/SourceFiles/data/data_premium_limits.cpp b/Telegram/SourceFiles/data/data_premium_limits.cpp index 443474040..ecca86149 100644 --- a/Telegram/SourceFiles/data/data_premium_limits.cpp +++ b/Telegram/SourceFiles/data/data_premium_limits.cpp @@ -217,4 +217,80 @@ bool PremiumLimits::isPremium() const { return _session->premium(); } +LevelLimits::LevelLimits(not_null session) +: _session(session) { +} + +int LevelLimits::channelColorLevelMin() const { + return _session->account().appConfig().get( + u"channel_color_level_min"_q, + 5); +} + +int LevelLimits::channelBgIconLevelMin() const { + return _session->account().appConfig().get( + u"channel_bg_icon_level_min"_q, + 4); +} + +int LevelLimits::channelProfileBgIconLevelMin() const { + return _session->account().appConfig().get( + u"channel_profile_bg_icon_level_min"_q, + 7); +} + +int LevelLimits::channelEmojiStatusLevelMin() const { + return _session->account().appConfig().get( + u"channel_emoji_status_level_min"_q, + 8); +} + +int LevelLimits::channelWallpaperLevelMin() const { + return _session->account().appConfig().get( + u"channel_wallpaper_level_min"_q, + 9); +} + +int LevelLimits::channelCustomWallpaperLevelMin() const { + return _session->account().appConfig().get( + u"channel_custom_wallpaper_level_min"_q, + 10); +} + +int LevelLimits::groupTranscribeLevelMin() const { + return _session->account().appConfig().get( + u"group_transcribe_level_min"_q, + 6); +} + +int LevelLimits::groupEmojiStickersLevelMin() const { + return _session->account().appConfig().get( + u"group_emoji_stickers_level_min"_q, + 4); +} + +int LevelLimits::groupProfileBgIconLevelMin() const { + return _session->account().appConfig().get( + u"group_profile_bg_icon_level_min"_q, + 5); +} + +int LevelLimits::groupEmojiStatusLevelMin() const { + return _session->account().appConfig().get( + u"group_emoji_status_level_min"_q, + 8); +} + +int LevelLimits::groupWallpaperLevelMin() const { + return _session->account().appConfig().get( + u"group_wallpaper_level_min"_q, + 9); +} + +int LevelLimits::groupCustomWallpaperLevelMin() const { + return _session->account().appConfig().get( + u"group_custom_wallpaper_level_min"_q, + 10); +} + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_premium_limits.h b/Telegram/SourceFiles/data/data_premium_limits.h index bc3c86d9f..5c50d7a12 100644 --- a/Telegram/SourceFiles/data/data_premium_limits.h +++ b/Telegram/SourceFiles/data/data_premium_limits.h @@ -91,4 +91,26 @@ private: }; +class LevelLimits final { +public: + LevelLimits(not_null session); + + [[nodiscard]] int channelColorLevelMin() const; + [[nodiscard]] int channelBgIconLevelMin() const; + [[nodiscard]] int channelProfileBgIconLevelMin() const; + [[nodiscard]] int channelEmojiStatusLevelMin() const; + [[nodiscard]] int channelWallpaperLevelMin() const; + [[nodiscard]] int channelCustomWallpaperLevelMin() const; + [[nodiscard]] int groupTranscribeLevelMin() const; + [[nodiscard]] int groupEmojiStickersLevelMin() const; + [[nodiscard]] int groupProfileBgIconLevelMin() const; + [[nodiscard]] int groupEmojiStatusLevelMin() const; + [[nodiscard]] int groupWallpaperLevelMin() const; + [[nodiscard]] int groupCustomWallpaperLevelMin() const; + +private: + const not_null _session; + +}; + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index c8235eac4..e7ec13242 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -239,10 +239,8 @@ Session::Session(not_null session) _session->local().cacheBigFilePath(), _session->local().cacheBigFileSettings())) , _groupFreeTranscribeLevel(session->account().appConfig().value( -) | rpl::map([=] { - return session->account().appConfig().get( - u"group_transcribe_level_min"_q, - 6); +) | rpl::map([limits = Data::LevelLimits(session)] { + return limits.groupTranscribeLevelMin(); })) , _chatsList( session, @@ -2185,8 +2183,7 @@ rpl::producer Session::maxPinnedChatsLimitValue( // because it slices the list to that limit. We don't want to slice // premium-ly added chats from the pinned list because of sync issues. return _session->account().appConfig().value( - ) | rpl::map([=] { - const auto limits = Data::PremiumLimits(_session); + ) | rpl::map([folder, limits = Data::PremiumLimits(_session)] { return folder ? limits.dialogsFolderPinnedPremium() : limits.dialogsPinnedPremium(); @@ -2200,8 +2197,7 @@ rpl::producer Session::maxPinnedChatsLimitValue( // because it slices the list to that limit. We don't want to slice // premium-ly added chats from the pinned list because of sync issues. return _session->account().appConfig().value( - ) | rpl::map([=] { - const auto limits = Data::PremiumLimits(_session); + ) | rpl::map([limits = Data::PremiumLimits(_session)] { return limits.dialogFiltersChatsPremium(); }); } @@ -2209,8 +2205,7 @@ rpl::producer Session::maxPinnedChatsLimitValue( rpl::producer Session::maxPinnedChatsLimitValue( not_null forum) const { return _session->account().appConfig().value( - ) | rpl::map([=] { - const auto limits = Data::PremiumLimits(_session); + ) | rpl::map([limits = Data::PremiumLimits(_session)] { return limits.topicsPinnedCurrent(); }); } @@ -2222,8 +2217,7 @@ rpl::producer Session::maxPinnedChatsLimitValue( // because it slices the list to that limit. We don't want to slice // premium-ly added chats from the pinned list because of sync issues. return _session->account().appConfig().value( - ) | rpl::map([=] { - const auto limits = Data::PremiumLimits(_session); + ) | rpl::map([limits = Data::PremiumLimits(_session)] { return limits.savedSublistsPinnedPremium(); }); }