From 35e4dd59686c7ecdb2b0259037dfd6d7e37d29a1 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 31 May 2022 15:32:41 +0300 Subject: [PATCH] Added initial support for increased premium count of accounts. --- Telegram/SourceFiles/main/main_domain.cpp | 12 ++++++++++-- Telegram/SourceFiles/main/main_domain.h | 3 +++ Telegram/SourceFiles/settings/settings_common.cpp | 2 +- .../SourceFiles/settings/settings_information.cpp | 10 ++++++++-- Telegram/SourceFiles/storage/storage_domain.cpp | 4 ++-- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/main/main_domain.cpp b/Telegram/SourceFiles/main/main_domain.cpp index 60d50a4a8..ea9f3a5c4 100644 --- a/Telegram/SourceFiles/main/main_domain.cpp +++ b/Telegram/SourceFiles/main/main_domain.cpp @@ -236,7 +236,7 @@ void Domain::scheduleUpdateUnreadBadge() { not_null Domain::add(MTP::Environment environment) { Expects(started()); - Expects(_accounts.size() < kMaxAccounts); + Expects(_accounts.size() < kPremiumMaxAccounts); static const auto cloneConfig = [](const MTP::Config &config) { return std::make_unique(config); @@ -283,7 +283,7 @@ not_null Domain::add(MTP::Environment environment) { } void Domain::addActivated(MTP::Environment environment) { - if (accounts().size() < Main::Domain::kMaxAccounts) { + if (accounts().size() < maxAccounts()) { activate(add(environment)); } else { for (auto &[index, account] : accounts()) { @@ -438,4 +438,12 @@ void Domain::scheduleWriteAccounts() { }); } +int Domain::maxAccounts() const { + const auto isAnyPreimium = ranges::any_of(accounts(), []( + const Main::Domain::AccountWithIndex &d) { + return d.account->session().premium(); + }); + return isAnyPreimium ? kPremiumMaxAccounts : kMaxAccounts; +} + } // namespace Main diff --git a/Telegram/SourceFiles/main/main_domain.h b/Telegram/SourceFiles/main/main_domain.h index ad4d6f11f..18fde0814 100644 --- a/Telegram/SourceFiles/main/main_domain.h +++ b/Telegram/SourceFiles/main/main_domain.h @@ -31,6 +31,7 @@ public: }; static constexpr auto kMaxAccounts = 3; + static constexpr auto kPremiumMaxAccounts = 4; explicit Domain(const QString &dataName); ~Domain(); @@ -40,6 +41,8 @@ public: void resetWithForgottenPasscode(); void finish(); + [[nodiscard]] int maxAccounts() const; + [[nodiscard]] Storage::Domain &local() const { return *_local; } diff --git a/Telegram/SourceFiles/settings/settings_common.cpp b/Telegram/SourceFiles/settings/settings_common.cpp index bdbbb1477..42a728364 100644 --- a/Telegram/SourceFiles/settings/settings_common.cpp +++ b/Telegram/SourceFiles/settings/settings_common.cpp @@ -326,7 +326,7 @@ void FillMenu( &st::menuIconCancel); } else { const auto &list = Core::App().domain().accounts(); - if (list.size() < ::Main::Domain::kMaxAccounts) { + if (list.size() < Core::App().domain().maxAccounts()) { addAction(tr::lng_menu_add_account(tr::now), [=] { Core::App().domain().addActivated(MTP::Environment{}); }, &st::menuIconAddAccount); diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index f1e6bde0c..7820b7029 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -708,7 +708,13 @@ not_null*> AccountsList::setupAdd() { const auto add = [=](MTP::Environment environment) { Core::App().preventOrInvoke([=] { - Core::App().domain().addActivated(environment); + auto &domain = _controller->session().domain(); + if (domain.accounts().size() >= domain.maxAccounts()) { + _controller->show( + Box(AccountsLimitBox, &_controller->session())); + } else { + domain.addActivated(environment); + } }); }; @@ -804,7 +810,7 @@ void AccountsList::rebuild() { inner->resizeToWidth(_outer->width()); _addAccount->toggle( - (inner->count() < Main::Domain::kMaxAccounts), + (inner->count() < Main::Domain::kPremiumMaxAccounts), anim::type::instant); _reorder->start(); diff --git a/Telegram/SourceFiles/storage/storage_domain.cpp b/Telegram/SourceFiles/storage/storage_domain.cpp index ff1bc3e86..b10efea36 100644 --- a/Telegram/SourceFiles/storage/storage_domain.cpp +++ b/Telegram/SourceFiles/storage/storage_domain.cpp @@ -160,7 +160,7 @@ Domain::StartModernResult Domain::startModern( LOG(("App Info: reading encrypted info...")); auto count = qint32(); info.stream >> count; - if (count <= 0 || count > Main::Domain::kMaxAccounts) { + if (count <= 0 || count > Main::Domain::kPremiumMaxAccounts) { LOG(("App Error: bad accounts count: %1").arg(count)); return StartModernResult::Failed; } @@ -174,7 +174,7 @@ Domain::StartModernResult Domain::startModern( auto index = qint32(); info.stream >> index; if (index >= 0 - && index < Main::Domain::kMaxAccounts + && index < Main::Domain::kPremiumMaxAccounts && tried.emplace(index).second) { auto account = std::make_unique( _owner,