mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Moved out all values of premium limits to single place.
This commit is contained in:
parent
08ebff4e5d
commit
7b00671ccf
14 changed files with 333 additions and 275 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<PeerListRow> PublicsController::createRow(
|
|||
return result;
|
||||
}
|
||||
|
||||
[[nodiscard]] float64 Limit(
|
||||
not_null<Main::Session*> session,
|
||||
const QString &key,
|
||||
int fallback) {
|
||||
return 1. * AppConfigLimit(session, key, fallback);
|
||||
}
|
||||
|
||||
void SimpleLimitBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> session,
|
||||
|
@ -496,20 +489,13 @@ void SimplePinsLimitBox(
|
|||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> 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<PeerListDummy>(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<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> 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<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> 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<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> 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<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> 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<Main::Session*> session,
|
||||
const QString &key,
|
||||
int fallback) {
|
||||
return int(base::SafeRound(
|
||||
session->account().appConfig().get<double>(key, 1. * fallback)));
|
||||
}
|
||||
|
||||
int CurrentPremiumLimit(
|
||||
not_null<Main::Session*> 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<Main::Session*> session) {
|
||||
return CurrentPremiumLimit(
|
||||
session,
|
||||
"dialog_filters_limit_default",
|
||||
10,
|
||||
"dialog_filters_limit_premium",
|
||||
20);
|
||||
}
|
||||
|
|
|
@ -58,17 +58,3 @@ void AccountsLimitBox(
|
|||
not_null<Main::Session*> session);
|
||||
|
||||
[[nodiscard]] QString LimitsPremiumRef(const QString &addition);
|
||||
|
||||
[[nodiscard]] int AppConfigLimit(
|
||||
not_null<Main::Session*> session,
|
||||
const QString &key,
|
||||
int fallback);
|
||||
[[nodiscard]] int CurrentPremiumLimit(
|
||||
not_null<Main::Session*> session,
|
||||
const QString &keyDefault,
|
||||
int limitDefault,
|
||||
const QString &keyPremium,
|
||||
int limitPremium);
|
||||
|
||||
[[nodiscard]] int CurrentPremiumFiltersLimit(
|
||||
not_null<Main::Session*> session);
|
||||
|
|
|
@ -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<Ui::GenericBox*> box) {
|
|||
void DoubledLimitsPreviewBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Main::Session*> session) {
|
||||
const auto limits = Data::PremiumLimits(session);
|
||||
auto entries = std::vector<Ui::Premium::ListEntry>();
|
||||
{
|
||||
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,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
163
Telegram/SourceFiles/data/data_premium_limits.cpp
Normal file
163
Telegram/SourceFiles/data/data_premium_limits.cpp
Normal file
|
@ -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<Main::Session*> 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<double>(key, fallback)));
|
||||
}
|
||||
|
||||
bool PremiumLimits::isPremium() const {
|
||||
return _session->premium();
|
||||
}
|
||||
|
||||
} // namespace Data
|
74
Telegram/SourceFiles/data/data_premium_limits.h
Normal file
74
Telegram/SourceFiles/data/data_premium_limits.h
Normal file
|
@ -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<Main::Session*> 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<Main::Session*> _session;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Data
|
|
@ -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<int> Session::maxPinnedChatsLimitValue(
|
||||
|
@ -1888,14 +1880,12 @@ rpl::producer<int> 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();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Main::Session*> 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<Main::Session*> 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"));
|
||||
}
|
||||
|
||||
|
|
|
@ -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) + "...";
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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<Ui::VerticalLayout*> container,
|
||||
not_null<UserData*> 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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue