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) {
Expects(started());
Expects(_accounts.size() < kMaxAccounts);
Expects(_accounts.size() < kPremiumMaxAccounts);
static const auto cloneConfig = [](const 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) {
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

View File

@ -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;
}

View File

@ -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);

View File

@ -708,7 +708,13 @@ not_null<Ui::SlideWrap<Ui::SettingsButton>*> 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();

View File

@ -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<Main::Account>(
_owner,