diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 40817933d..f97c09b14 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -498,6 +498,8 @@ PRIVATE data/data_photo_media.h data/data_poll.cpp data/data_poll.h + data/data_premium_limits.cpp + data/data_premium_limits.h data/data_pts_waiter.cpp data/data_pts_waiter.h data/data_replies_list.cpp diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index e59cd311c..4e053be74 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -24,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_photo_media.h" #include "data/data_session.h" #include "data/data_user.h" +#include "data/data_premium_limits.h" #include "editor/photo_editor_layer_widget.h" #include "history/history_drag_area.h" #include "history/history_item.h" @@ -653,12 +654,7 @@ void EditCaptionBox::setInnerFocus() { bool EditCaptionBox::validateLength(const QString &text) const { const auto session = &_controller->session(); - const auto limit = CurrentPremiumLimit( - session, - "caption_length_limit_default", - 1024, - "caption_length_limit_premium", - 2048); + const auto limit = Data::PremiumLimits(session).captionLengthCurrent(); const auto remove = int(text.size()) - limit; if (remove <= 0) { return true; diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index 347508954..5b8bc827f 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -16,7 +16,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/toasts/common_toasts.h" #include "main/main_session.h" #include "main/main_account.h" -#include "main/main_app_config.h" #include "main/main_domain.h" #include "boxes/peer_list_controllers.h" #include "boxes/peers/prepare_short_info_box.h" // PrepareShortInfoBox @@ -26,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_channel.h" #include "data/data_session.h" #include "data/data_folder.h" +#include "data/data_premium_limits.h" #include "lang/lang_keys.h" #include "settings/settings_common.h" #include "settings/settings_premium.h" @@ -397,13 +397,6 @@ std::unique_ptr PublicsController::createRow( return result; } -[[nodiscard]] float64 Limit( - not_null session, - const QString &key, - int fallback) { - return 1. * AppConfigLimit(session, key, fallback); -} - void SimpleLimitBox( not_null box, not_null session, @@ -496,20 +489,13 @@ void SimplePinsLimitBox( not_null box, not_null session, const QString &refAddition, - const QString &keyDefault, - int limitDefault, - const QString &keyPremium, - int limitPremium, - int currentCount) { + float64 defaultLimit, + float64 premiumLimit, + float64 currentCount) { const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit(session, keyDefault, limitDefault); - const auto premiumLimit = Limit(session, keyPremium, limitPremium); - const auto current = std::clamp( - float64(currentCount), - defaultLimit, - premiumLimit); + const auto current = std::clamp(currentCount, defaultLimit, premiumLimit); auto text = rpl::combine( tr::lng_filter_pin_limit1( @@ -544,8 +530,9 @@ void ChannelsLimitBox( const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit(session, "channels_limit_default", 500); - const auto premiumLimit = Limit(session, "channels_limit_premium", 1000); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.channelsDefault()); + const auto premiumLimit = float64(limits.channelsPremium()); const auto current = (premium ? premiumLimit : defaultLimit); auto text = rpl::combine( @@ -635,14 +622,9 @@ void PublicLinksLimitBox( const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit( - session, - "channels_public_limit_default", - 10); - const auto premiumLimit = Limit( - session, - "channels_public_limit_premium", - 20); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.channelsPublicDefault()); + const auto premiumLimit = float64(limits.channelsPublicPremium()); const auto current = (premium ? premiumLimit : defaultLimit); auto text = rpl::combine( @@ -682,7 +664,7 @@ void PublicLinksLimitBox( delegate->setContent(content); controller->setDelegate(delegate); - const auto count = Limit(session, "channels_public_limit_default", 10); + const auto count = defaultLimit; const auto placeholder = box->addRow( object_ptr(box, count, st::defaultPeerList), {}); @@ -701,14 +683,9 @@ void FilterChatsLimitBox( const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit( - session, - "dialog_filters_chats_limit_default", - 100); - const auto premiumLimit = Limit( - session, - "dialog_filters_chats_limit_premium", - 200); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.dialogFiltersChatsDefault()); + const auto premiumLimit = float64(limits.dialogFiltersChatsPremium()); const auto current = std::clamp( float64(currentCount), defaultLimit, @@ -746,14 +723,9 @@ void FiltersLimitBox( const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit( - session, - "dialog_filters_limit_default", - 10); - const auto premiumLimit = Limit( - session, - "dialog_filters_limit_premium", - 20); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.dialogFiltersDefault()); + const auto premiumLimit = float64(limits.dialogFiltersPremium()); const auto current = float64(ranges::count_if( session->data().chatsFilters().list(), [](const Data::ChatFilter &f) { return f.id() != FilterId(); })); @@ -787,42 +759,39 @@ void FilterPinsLimitBox( not_null box, not_null session, FilterId filterId) { + const auto limits = Data::PremiumLimits(session); SimplePinsLimitBox( box, session, "dialog_filters_pinned", - "dialog_filters_chats_limit_default", - 100, - "dialog_filters_chats_limit_premium", - 200, + limits.dialogFiltersChatsDefault(), + limits.dialogFiltersChatsPremium(), PinsCount(session->data().chatsFilters().chatsList(filterId))); } void FolderPinsLimitBox( not_null box, not_null session) { + const auto limits = Data::PremiumLimits(session); SimplePinsLimitBox( box, session, "dialogs_folder_pinned", - "dialogs_folder_pinned_limit_default", - 100, - "dialogs_folder_pinned_limit_premium", - 200, + limits.dialogsFolderPinnedDefault(), + limits.dialogsFolderPinnedPremium(), PinsCount(session->data().folder(Data::Folder::kId)->chatsList())); } void PinsLimitBox( not_null box, not_null session) { + const auto limits = Data::PremiumLimits(session); SimplePinsLimitBox( box, session, "dialog_pinned", - "dialogs_pinned_limit_default", - 5, - "dialogs_pinned_limit_premium", - 10, + limits.dialogsPinnedDefault(), + limits.dialogsPinnedPremium(), PinsCount(session->data().chatsList())); } @@ -833,14 +802,9 @@ void CaptionLimitBox( const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); - const auto defaultLimit = Limit( - session, - "caption_length_limit_default", - 1024); - const auto premiumLimit = Limit( - session, - "caption_length_limit_premium", - 2048); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.captionLengthDefault()); + const auto premiumLimit = float64(limits.captionLengthPremium()); const auto currentLimit = premium ? premiumLimit : defaultLimit; const auto current = std::clamp( remove + currentLimit, @@ -896,14 +860,9 @@ void FileSizeLimitBox( not_null box, not_null session, uint64 fileSizeBytes) { - const auto defaultLimit = Limit( - session, - "upload_max_fileparts_default", - 4000); - const auto premiumLimit = Limit( - session, - "upload_max_fileparts_premium", - 8000); + const auto limits = Data::PremiumLimits(session); + const auto defaultLimit = float64(limits.uploadMaxDefault()); + const auto premiumLimit = float64(limits.uploadMaxPremium()); const auto defaultGb = float64(int(defaultLimit + 999) / 2000); const auto premiumGb = float64(int(premiumLimit + 999) / 2000); @@ -1081,33 +1040,3 @@ void AccountsLimitBox( QString LimitsPremiumRef(const QString &addition) { return "double_limits__" + addition; } - -int AppConfigLimit( - not_null session, - const QString &key, - int fallback) { - return int(base::SafeRound( - session->account().appConfig().get(key, 1. * fallback))); -} - -int CurrentPremiumLimit( - not_null session, - const QString &keyDefault, - int limitDefault, - const QString &keyPremium, - int limitPremium) { - const auto premium = session->premium(); - return AppConfigLimit( - session, - premium ? keyPremium : keyDefault, - premium ? limitPremium : limitDefault); -} - -int CurrentPremiumFiltersLimit(not_null session) { - return CurrentPremiumLimit( - session, - "dialog_filters_limit_default", - 10, - "dialog_filters_limit_premium", - 20); -} diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.h b/Telegram/SourceFiles/boxes/premium_limits_box.h index a85d1f9ae..de2a7db73 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.h +++ b/Telegram/SourceFiles/boxes/premium_limits_box.h @@ -58,17 +58,3 @@ void AccountsLimitBox( not_null session); [[nodiscard]] QString LimitsPremiumRef(const QString &addition); - -[[nodiscard]] int AppConfigLimit( - not_null session, - const QString &key, - int fallback); -[[nodiscard]] int CurrentPremiumLimit( - not_null session, - const QString &keyDefault, - int limitDefault, - const QString &keyPremium, - int limitPremium); - -[[nodiscard]] int CurrentPremiumFiltersLimit( - not_null session); diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 76e901024..fabbdafdb 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_document_media.h" #include "data/data_streaming.h" #include "data/data_peer_values.h" +#include "data/data_premium_limits.h" #include "lang/lang_keys.h" #include "main/main_session.h" #include "main/main_domain.h" // kMaxAccounts @@ -31,7 +32,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/gradient_round_button.h" #include "ui/wrap/padding_wrap.h" #include "ui/boxes/confirm_box.h" -#include "boxes/premium_limits_box.h" // AppConfigLimit #include "settings/settings_premium.h" #include "lottie/lottie_single_player.h" #include "history/view/media/history_view_sticker.h" @@ -1659,162 +1659,109 @@ void PremiumUnavailableBox(not_null box) { void DoubledLimitsPreviewBox( not_null box, not_null session) { + const auto limits = Data::PremiumLimits(session); auto entries = std::vector(); { - const auto premium = AppConfigLimit( - session, - "channels_limit_premium", - 500 * 2); + const auto premium = limits.channelsPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_channels(), tr::lng_premium_double_limits_about_channels( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "channels_limit_default", - 500), + limits.channelsDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "dialogs_folder_pinned_limit_premium", - 5 * 2); + const auto premium = limits.dialogsFolderPinnedPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_pins(), tr::lng_premium_double_limits_about_pins( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "dialogs_folder_pinned_limit_default", - 5), + limits.dialogsFolderPinnedDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "channels_public_limit_premium", - 10 * 2); + const auto premium = limits.channelsPublicPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_links(), tr::lng_premium_double_limits_about_links( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "channels_public_limit_default", - 10), + limits.channelsPublicDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "saved_gifs_limit_premium", - 200 * 2); + const auto premium = limits.gifsPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_gifs(), tr::lng_premium_double_limits_about_gifs( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "saved_gifs_limit_default", - 200), + limits.gifsDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "stickers_faved_limit_premium", - 5 * 2); + const auto premium = limits.stickersFavedPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_stickers(), tr::lng_premium_double_limits_about_stickers( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "stickers_faved_limit_default", - 5), + limits.stickersFavedDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "about_length_limit_premium", - 70 * 2); + const auto premium = limits.captionLengthPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_bio(), tr::lng_premium_double_limits_about_bio( Ui::Text::RichLangValue), - AppConfigLimit( - session, - "about_length_limit_default", - 70), + limits.captionLengthDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "caption_length_limit_premium", - 1024 * 2); + const auto premium = limits.captionLengthPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_captions(), tr::lng_premium_double_limits_about_captions( Ui::Text::RichLangValue), - AppConfigLimit( - session, - "caption_length_limit_default", - 1024), + limits.captionLengthDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "dialog_filters_limit_premium", - 10 * 2); + const auto premium = limits.dialogFiltersPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_folders(), tr::lng_premium_double_limits_about_folders( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "dialog_filters_limit_default", - 10), + limits.dialogFiltersDefault(), premium, }); } { - const auto premium = AppConfigLimit( - session, - "dialog_filters_chats_limit_premium", - 100 * 2); + const auto premium = limits.dialogFiltersChatsPremium(); entries.push_back(Ui::Premium::ListEntry{ tr::lng_premium_double_limits_subtitle_folder_chats(), tr::lng_premium_double_limits_about_folder_chats( lt_count, rpl::single(float64(premium)), Ui::Text::RichLangValue), - AppConfigLimit( - session, - "dialog_filters_chats_limit_default", - 100), + limits.dialogFiltersChatsDefault(), premium, }); } diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index 7ff717921..63ea695b2 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -47,6 +47,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lottie/lottie_single_player.h" #include "data/data_document.h" #include "data/data_user.h" +#include "data/data_premium_limits.h" #include "media/clip/media_clip_reader.h" #include "api/api_common.h" #include "window/window_session_controller.h" @@ -985,12 +986,7 @@ void SendFilesBox::saveSendWaySettings() { bool SendFilesBox::validateLength(const QString &text) const { const auto session = &_controller->session(); - const auto limit = CurrentPremiumLimit( - session, - "caption_length_limit_default", - 1024, - "caption_length_limit_premium", - 2048); + const auto limit = Data::PremiumLimits(session).captionLengthCurrent(); const auto remove = int(text.size()) - limit; const auto way = _sendWay.current(); if (remove <= 0 diff --git a/Telegram/SourceFiles/data/data_premium_limits.cpp b/Telegram/SourceFiles/data/data_premium_limits.cpp new file mode 100644 index 000000000..8dd436250 --- /dev/null +++ b/Telegram/SourceFiles/data/data_premium_limits.cpp @@ -0,0 +1,163 @@ +/* +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_premium_limits.h" + +#include "main/main_account.h" +#include "main/main_app_config.h" +#include "main/main_session.h" + +namespace Data { + +PremiumLimits::PremiumLimits(not_null session) +: _session(session) { +} + +int PremiumLimits::channelsDefault() const { + return appConfigLimit("channels_limit_default", 500.); +} +int PremiumLimits::channelsPremium() const { + return appConfigLimit("channels_limit_premium", 1000.); +} +int PremiumLimits::channelsCurrent() const { + return isPremium() + ? channelsPremium() + : channelsDefault(); +} + +int PremiumLimits::gifsDefault() const { + return appConfigLimit("saved_gifs_limit_default", 200.); +} +int PremiumLimits::gifsPremium() const { + return appConfigLimit("saved_gifs_limit_premium", 400.); +} +int PremiumLimits::gifsCurrent() const { + return isPremium() + ? gifsPremium() + : gifsDefault(); +} + +int PremiumLimits::stickersFavedDefault() const { + return appConfigLimit("stickers_faved_limit_default", 5.); +} +int PremiumLimits::stickersFavedPremium() const { + return appConfigLimit("stickers_faved_limit_premium", 10.); +} +int PremiumLimits::stickersFavedCurrent() const { + return isPremium() + ? stickersFavedPremium() + : stickersFavedDefault(); +} + +int PremiumLimits::dialogFiltersDefault() const { + return appConfigLimit("dialog_filters_limit_default", 10.); +} +int PremiumLimits::dialogFiltersPremium() const { + return appConfigLimit("dialog_filters_limit_premium", 20.); +} +int PremiumLimits::dialogFiltersCurrent() const { + return isPremium() + ? dialogFiltersPremium() + : dialogFiltersDefault(); +} + +int PremiumLimits::dialogFiltersChatsDefault() const { + return appConfigLimit("dialog_filters_chats_limit_default", 100.); +} +int PremiumLimits::dialogFiltersChatsPremium() const { + return appConfigLimit("dialog_filters_chats_limit_premium", 200.); +} +int PremiumLimits::dialogFiltersChatsCurrent() const { + return isPremium() + ? dialogFiltersChatsPremium() + : dialogFiltersChatsDefault(); +} + +int PremiumLimits::dialogsPinnedDefault() const { + return appConfigLimit("dialogs_pinned_limit_default", 5.); +} +int PremiumLimits::dialogsPinnedPremium() const { + return appConfigLimit("dialogs_pinned_limit_premium", 10.); +} +int PremiumLimits::dialogsPinnedCurrent() const { + return isPremium() + ? dialogsPinnedPremium() + : dialogsPinnedDefault(); +} + +int PremiumLimits::dialogsFolderPinnedDefault() const { + return appConfigLimit("dialogs_folder_pinned_limit_default", 100.); +} +int PremiumLimits::dialogsFolderPinnedPremium() const { + return appConfigLimit("dialogs_folder_pinned_limit_premium", 200.); +} +int PremiumLimits::dialogsFolderPinnedCurrent() const { + return isPremium() + ? dialogsFolderPinnedPremium() + : dialogsFolderPinnedDefault(); +} + +int PremiumLimits::channelsPublicDefault() const { + return appConfigLimit("channels_public_limit_default", 10.); +} +int PremiumLimits::channelsPublicPremium() const { + return appConfigLimit("channels_public_limit_premium", 20.); +} +int PremiumLimits::channelsPublicCurrent() const { + return isPremium() + ? channelsPublicPremium() + : channelsPublicDefault(); +} + +int PremiumLimits::captionLengthDefault() const { + return appConfigLimit("caption_length_limit_default", 1024.); +} +int PremiumLimits::captionLengthPremium() const { + return appConfigLimit("caption_length_limit_premium", 2048.); +} +int PremiumLimits::captionLengthCurrent() const { + return isPremium() + ? captionLengthPremium() + : captionLengthDefault(); +} + +int PremiumLimits::uploadMaxDefault() const { + return appConfigLimit("upload_max_fileparts_default", 4000.); +} +int PremiumLimits::uploadMaxPremium() const { + return appConfigLimit("upload_max_fileparts_premium", 8000.); +} +int PremiumLimits::uploadMaxCurrent() const { + return isPremium() + ? uploadMaxPremium() + : uploadMaxDefault(); +} + +int PremiumLimits::aboutLengthDefault() const { + return appConfigLimit("about_length_limit_default", 70.); +} +int PremiumLimits::aboutLengthPremium() const { + return appConfigLimit("about_length_limit_premium", 140.); +} +int PremiumLimits::aboutLengthCurrent() const { + return isPremium() + ? aboutLengthPremium() + : aboutLengthDefault(); +} + +int PremiumLimits::appConfigLimit( + const QString &key, + float64 fallback) const { + return int(base::SafeRound( + _session->account().appConfig().get(key, fallback))); +} + +bool PremiumLimits::isPremium() const { + return _session->premium(); +} + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_premium_limits.h b/Telegram/SourceFiles/data/data_premium_limits.h new file mode 100644 index 000000000..331515f80 --- /dev/null +++ b/Telegram/SourceFiles/data/data_premium_limits.h @@ -0,0 +1,74 @@ +/* +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 Main { +class Session; +} // namespace Main + +namespace Data { + +class PremiumLimits final { +public: + PremiumLimits(not_null session); + + [[nodiscard]] int channelsDefault() const; + [[nodiscard]] int channelsPremium() const; + [[nodiscard]] int channelsCurrent() const; + + [[nodiscard]] int gifsDefault() const; + [[nodiscard]] int gifsPremium() const; + [[nodiscard]] int gifsCurrent() const; + + [[nodiscard]] int stickersFavedDefault() const; + [[nodiscard]] int stickersFavedPremium() const; + [[nodiscard]] int stickersFavedCurrent() const; + + [[nodiscard]] int dialogFiltersDefault() const; + [[nodiscard]] int dialogFiltersPremium() const; + [[nodiscard]] int dialogFiltersCurrent() const; + + [[nodiscard]] int dialogFiltersChatsDefault() const; + [[nodiscard]] int dialogFiltersChatsPremium() const; + [[nodiscard]] int dialogFiltersChatsCurrent() const; + + [[nodiscard]] int dialogsPinnedDefault() const; + [[nodiscard]] int dialogsPinnedPremium() const; + [[nodiscard]] int dialogsPinnedCurrent() const; + + [[nodiscard]] int dialogsFolderPinnedDefault() const; + [[nodiscard]] int dialogsFolderPinnedPremium() const; + [[nodiscard]] int dialogsFolderPinnedCurrent() const; + + [[nodiscard]] int channelsPublicDefault() const; + [[nodiscard]] int channelsPublicPremium() const; + [[nodiscard]] int channelsPublicCurrent() const; + + [[nodiscard]] int captionLengthDefault() const; + [[nodiscard]] int captionLengthPremium() const; + [[nodiscard]] int captionLengthCurrent() const; + + [[nodiscard]] int uploadMaxDefault() const; + [[nodiscard]] int uploadMaxPremium() const; + [[nodiscard]] int uploadMaxCurrent() const; + + [[nodiscard]] int aboutLengthDefault() const; + [[nodiscard]] int aboutLengthPremium() const; + [[nodiscard]] int aboutLengthCurrent() const; + +private: + [[nodiscard]] int appConfigLimit( + const QString &key, + float64 fallback) const; + [[nodiscard]] bool isPremium() const; + + const not_null _session; + +}; + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 37378c882..fec3b1b93 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -35,7 +35,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "media/player/media_player_instance.h" // instance()->play() #include "media/audio/media_audio.h" #include "boxes/abstract_box.h" -#include "boxes/premium_limits_box.h" #include "passport/passport_form_controller.h" #include "lang/lang_keys.h" // tr::lng_deleted(tr::now) in user name #include "data/stickers/data_stickers.h" @@ -65,6 +64,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_media_rotation.h" #include "data/data_histories.h" #include "data/data_peer_values.h" +#include "data/data_premium_limits.h" #include "base/platform/base_platform_info.h" #include "base/unixtime.h" #include "base/call_delayed.h" @@ -1862,20 +1862,12 @@ int Session::pinnedCanPin( int Session::pinnedChatsLimit( Data::Folder *folder, FilterId filterId) const { - return CurrentPremiumLimit( - _session, - (filterId - ? "dialog_filters_chats_limit_default" - : folder - ? "dialog_filters_chats_limit_default" - : "dialogs_pinned_limit_default"), - (filterId || folder) ? 100 : 5, - (filterId - ? "dialog_filters_chats_limit_premium" - : folder - ? "dialog_filters_chats_limit_premium" - : "dialogs_pinned_limit_premium"), - (filterId || folder) ? 200 : 10); + const auto limits = Data::PremiumLimits(_session); + return filterId + ? limits.dialogFiltersChatsCurrent() + : folder + ? limits.dialogsFolderPinnedCurrent() + : limits.dialogsPinnedCurrent(); } rpl::producer Session::maxPinnedChatsLimitValue( @@ -1888,14 +1880,12 @@ rpl::producer Session::maxPinnedChatsLimitValue( return rpl::single(rpl::empty_value()) | rpl::then( _session->account().appConfig().refreshed() ) | rpl::map([=] { - return AppConfigLimit( - _session, - (filterId - ? "dialog_filters_chats_limit_premium" - : folder - ? "dialog_filters_chats_limit_premium" - : "dialogs_pinned_limit_premium"), - (filterId || folder) ? 200 : 10); + const auto limits = Data::PremiumLimits(_session); + return filterId + ? limits.dialogFiltersChatsPremium() + : folder + ? limits.dialogsFolderPinnedPremium() + : limits.dialogsPinnedPremium(); }); } diff --git a/Telegram/SourceFiles/data/stickers/data_stickers.cpp b/Telegram/SourceFiles/data/stickers/data_stickers.cpp index aa7055c3b..b9dc3c694 100644 --- a/Telegram/SourceFiles/data/stickers/data_stickers.cpp +++ b/Telegram/SourceFiles/data/stickers/data_stickers.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/boxes/confirm_box.h" #include "ui/text/text_utilities.h" #include "lang/lang_keys.h" +#include "data/data_premium_limits.h" #include "boxes/premium_limits_box.h" #include "history/history.h" #include "history/history_item.h" @@ -43,15 +44,9 @@ constexpr auto kPremiumToastDuration = 5 * crl::time(1000); using SetFlag = StickersSetFlag; [[nodiscard]] TextWithEntities SavedGifsToast( - not_null session) { - const auto defaultLimit = AppConfigLimit( - session, - "saved_gifs_limit_default", - 200); - const auto premiumLimit = AppConfigLimit( - session, - "saved_gifs_limit_premium", - 400); + const Data::PremiumLimits &limits) { + const auto defaultLimit = limits.gifsDefault(); + const auto premiumLimit = limits.gifsPremium(); return Ui::Text::Bold( tr::lng_saved_gif_limit_title(tr::now, lt_count, defaultLimit) ).append('\n').append( @@ -65,15 +60,9 @@ using SetFlag = StickersSetFlag; } [[nodiscard]] TextWithEntities FaveStickersToast( - not_null session) { - const auto defaultLimit = AppConfigLimit( - session, - "stickers_faved_limit_default", - 5); - const auto premiumLimit = AppConfigLimit( - session, - "stickers_faved_limit_premium", - 200); + const Data::PremiumLimits &limits) { + const auto defaultLimit = limits.stickersFavedDefault(); + const auto premiumLimit = limits.stickersFavedPremium(); return Ui::Text::Bold( tr::lng_fave_sticker_limit_title(tr::now, lt_count, defaultLimit) ).append('\n').append( @@ -315,17 +304,12 @@ void Stickers::addSavedGif( } _savedGifs.push_front(document); const auto session = &document->session(); - const auto limit = CurrentPremiumLimit( - session, - "saved_gifs_limit_default", - 200, - "saved_gifs_limit_premium", - 400); - if (_savedGifs.size() > limit) { + const auto limits = Data::PremiumLimits(session); + if (_savedGifs.size() > limits.gifsCurrent()) { _savedGifs.pop_back(); MaybeShowPremiumToast( controller, - SavedGifsToast(session), + SavedGifsToast(limits), LimitsPremiumRef("saved_gifs")); } session->local().writeSavedGifs(); @@ -517,13 +501,8 @@ void Stickers::checkFavedLimit( StickersSet &set, Window::SessionController *controller) { const auto session = &_owner->session(); - const auto limit = CurrentPremiumLimit( - session, - "stickers_faved_limit_default", - 5, - "stickers_faved_limit_premium", - 200); - if (set.stickers.size() <= limit) { + const auto limits = Data::PremiumLimits(session); + if (set.stickers.size() <= limits.stickersFavedCurrent()) { return; } auto removing = set.stickers.back(); @@ -541,7 +520,7 @@ void Stickers::checkFavedLimit( } MaybeShowPremiumToast( controller, - FaveStickersToast(session), + FaveStickersToast(limits), LimitsPremiumRef("stickers_faved")); } diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.cpp b/Telegram/SourceFiles/info/profile/info_profile_values.cpp index 26607fda2..a74d71ea4 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_values.cpp @@ -25,8 +25,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_chat.h" #include "data/data_user.h" #include "data/data_session.h" +#include "data/data_premium_limits.h" #include "boxes/peers/edit_peer_permissions_box.h" -#include "boxes/premium_limits_box.h" #include "base/unixtime.h" namespace Info { @@ -135,10 +135,8 @@ TextWithEntities AboutWithEntities( const auto stripExternal = peer->isChat() || peer->isMegagroup() || (user && !isBot && !isPremium); - const auto limit = AppConfigLimit( - &peer->session(), - "about_length_limit_default", - 70); + const auto limit = Data::PremiumLimits(&peer->session()) + .aboutLengthDefault(); const auto used = (!user || isPremium || value.size() <= limit) ? value : value.mid(0, limit) + "..."; diff --git a/Telegram/SourceFiles/settings/settings_folders.cpp b/Telegram/SourceFiles/settings/settings_folders.cpp index b948791f1..aa62e5746 100644 --- a/Telegram/SourceFiles/settings/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/settings_folders.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_peer.h" #include "data/data_peer_values.h" // Data::AmPremiumValue. #include "data/data_session.h" +#include "data/data_premium_limits.h" #include "history/history.h" #include "lang/lang_keys.h" #include "lottie/lottie_icon.h" @@ -328,7 +329,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { const auto session = &controller->session(); const auto limit = [=] { - return CurrentPremiumFiltersLimit(session); + return Data::PremiumLimits(session).dialogFiltersCurrent(); }; AddSkip(container, st::settingsSectionSkip); AddSubsectionTitle(container, tr::lng_filters_subtitle()); diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index b0f6fcae4..942f09d9c 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_user.h" #include "data/data_peer_values.h" #include "data/data_changes.h" +#include "data/data_premium_limits.h" #include "dialogs/ui/dialogs_layout.h" #include "info/profile/info_profile_values.h" #include "lang/lang_keys.h" @@ -455,14 +456,9 @@ void SetupRows( void SetupBio( not_null container, not_null self) { - const auto defaultLimit = AppConfigLimit( - &self->session(), - "about_length_limit_default", - 70); - const auto premiumLimit = AppConfigLimit( - &self->session(), - "about_length_limit_premium", - 140); + const auto limits = Data::PremiumLimits(&self->session()); + const auto defaultLimit = limits.aboutLengthDefault(); + const auto premiumLimit = limits.aboutLengthPremium(); const auto bioStyle = [=] { auto result = st::settingsBio; result.textMargins.setRight(st::boxTextFont->spacew diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index 502e409d1..1384bac35 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_folder.h" #include "data/data_user.h" #include "data/data_peer_values.h" +#include "data/data_premium_limits.h" #include "lang/lang_keys.h" #include "ui/filter_icons.h" #include "ui/wrap/vertical_layout_reorder.h" @@ -195,7 +196,7 @@ void FiltersMenu::refresh() { _reorder->clearPinnedIntervals(); const auto maxLimit = (reorderAll ? 1 : 0) - + CurrentPremiumFiltersLimit(&_session->session()); + + Data::PremiumLimits(&_session->session()).dialogFiltersCurrent(); const auto premiumFrom = (reorderAll ? 0 : 1) + maxLimit; if (!reorderAll) { _reorder->addPinnedInterval(0, 1);