Added initial support for increased premium count of accounts.

This commit is contained in:
23rd 2022-05-31 15:32:41 +03:00 committed by John Preston
parent 78246aada7
commit 35e4dd5968
5 changed files with 24 additions and 7 deletions

View file

@ -236,7 +236,7 @@ void Domain::scheduleUpdateUnreadBadge() {
not_null<Main::Account*> Domain::add(MTP::Environment environment) { not_null<Main::Account*> Domain::add(MTP::Environment environment) {
Expects(started()); Expects(started());
Expects(_accounts.size() < kMaxAccounts); Expects(_accounts.size() < kPremiumMaxAccounts);
static const auto cloneConfig = [](const MTP::Config &config) { static const auto cloneConfig = [](const MTP::Config &config) {
return std::make_unique<MTP::Config>(config); return std::make_unique<MTP::Config>(config);
@ -283,7 +283,7 @@ not_null<Main::Account*> Domain::add(MTP::Environment environment) {
} }
void Domain::addActivated(MTP::Environment environment) { void Domain::addActivated(MTP::Environment environment) {
if (accounts().size() < Main::Domain::kMaxAccounts) { if (accounts().size() < maxAccounts()) {
activate(add(environment)); activate(add(environment));
} else { } else {
for (auto &[index, account] : accounts()) { 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 } // namespace Main

View file

@ -31,6 +31,7 @@ public:
}; };
static constexpr auto kMaxAccounts = 3; static constexpr auto kMaxAccounts = 3;
static constexpr auto kPremiumMaxAccounts = 4;
explicit Domain(const QString &dataName); explicit Domain(const QString &dataName);
~Domain(); ~Domain();
@ -40,6 +41,8 @@ public:
void resetWithForgottenPasscode(); void resetWithForgottenPasscode();
void finish(); void finish();
[[nodiscard]] int maxAccounts() const;
[[nodiscard]] Storage::Domain &local() const { [[nodiscard]] Storage::Domain &local() const {
return *_local; return *_local;
} }

View file

@ -326,7 +326,7 @@ void FillMenu(
&st::menuIconCancel); &st::menuIconCancel);
} else { } else {
const auto &list = Core::App().domain().accounts(); 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), [=] { addAction(tr::lng_menu_add_account(tr::now), [=] {
Core::App().domain().addActivated(MTP::Environment{}); Core::App().domain().addActivated(MTP::Environment{});
}, &st::menuIconAddAccount); }, &st::menuIconAddAccount);

View file

@ -708,7 +708,13 @@ not_null<Ui::SlideWrap<Ui::SettingsButton>*> AccountsList::setupAdd() {
const auto add = [=](MTP::Environment environment) { const auto add = [=](MTP::Environment environment) {
Core::App().preventOrInvoke([=] { 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()); inner->resizeToWidth(_outer->width());
_addAccount->toggle( _addAccount->toggle(
(inner->count() < Main::Domain::kMaxAccounts), (inner->count() < Main::Domain::kPremiumMaxAccounts),
anim::type::instant); anim::type::instant);
_reorder->start(); _reorder->start();

View file

@ -160,7 +160,7 @@ Domain::StartModernResult Domain::startModern(
LOG(("App Info: reading encrypted info...")); LOG(("App Info: reading encrypted info..."));
auto count = qint32(); auto count = qint32();
info.stream >> count; 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)); LOG(("App Error: bad accounts count: %1").arg(count));
return StartModernResult::Failed; return StartModernResult::Failed;
} }
@ -174,7 +174,7 @@ Domain::StartModernResult Domain::startModern(
auto index = qint32(); auto index = qint32();
info.stream >> index; info.stream >> index;
if (index >= 0 if (index >= 0
&& index < Main::Domain::kMaxAccounts && index < Main::Domain::kPremiumMaxAccounts
&& tried.emplace(index).second) { && tried.emplace(index).second) {
auto account = std::make_unique<Main::Account>( auto account = std::make_unique<Main::Account>(
_owner, _owner,