diff --git a/Telegram/SourceFiles/api/api_self_destruct.cpp b/Telegram/SourceFiles/api/api_self_destruct.cpp index fb8497637e..4bc32f836c 100644 --- a/Telegram/SourceFiles/api/api_self_destruct.cpp +++ b/Telegram/SourceFiles/api/api_self_destruct.cpp @@ -16,36 +16,61 @@ SelfDestruct::SelfDestruct(not_null api) } void SelfDestruct::reload() { - if (_requestId) { - return; + if (!_accountTTL.requestId) { + _accountTTL.requestId = _api.request(MTPaccount_GetAccountTTL( + )).done([=](const MTPAccountDaysTTL &result) { + _accountTTL.requestId = 0; + _accountTTL.days = result.data().vdays().v; + }).fail([=] { + _accountTTL.requestId = 0; + }).send(); + } + if (!_defaultHistoryTTL.requestId) { + _defaultHistoryTTL.requestId = _api.request( + MTPmessages_GetDefaultHistoryTTL() + ).done([=](const MTPDefaultHistoryTTL &result) { + _defaultHistoryTTL.requestId = 0; + _defaultHistoryTTL.period = result.data().vperiod().v; + }).fail([=] { + _defaultHistoryTTL.requestId = 0; + }).send(); } - _requestId = _api.request(MTPaccount_GetAccountTTL( - )).done([=](const MTPAccountDaysTTL &result) { - _requestId = 0; - result.match([&](const MTPDaccountDaysTTL &data) { - _days = data.vdays().v; - }); - }).fail([=] { - _requestId = 0; - }).send(); } -rpl::producer SelfDestruct::days() const { - using namespace rpl::mappers; - - return _days.value() | rpl::filter(_1 != 0); +rpl::producer SelfDestruct::daysAccountTTL() const { + return _accountTTL.days.value() | rpl::filter(rpl::mappers::_1 != 0); } -void SelfDestruct::update(int days) { - _api.request(_requestId).cancel(); - _requestId = _api.request(MTPaccount_SetAccountTTL( +rpl::producer SelfDestruct::periodDefaultHistoryTTL() const { + return _defaultHistoryTTL.period.value(); +} + +TimeId SelfDestruct::periodDefaultHistoryTTLCurrent() const { + return _defaultHistoryTTL.period.current(); +} + +void SelfDestruct::updateAccountTTL(int days) { + _api.request(_accountTTL.requestId).cancel(); + _accountTTL.requestId = _api.request(MTPaccount_SetAccountTTL( MTP_accountDaysTTL(MTP_int(days)) )).done([=] { - _requestId = 0; + _accountTTL.requestId = 0; }).fail([=] { - _requestId = 0; + _accountTTL.requestId = 0; }).send(); - _days = days; + _accountTTL.days = days; +} + +void SelfDestruct::updateDefaultHistoryTTL(TimeId period) { + _api.request(_defaultHistoryTTL.requestId).cancel(); + _defaultHistoryTTL.requestId = _api.request( + MTPmessages_SetDefaultHistoryTTL(MTP_int(period)) + ).done([=] { + _defaultHistoryTTL.requestId = 0; + }).fail([=] { + _defaultHistoryTTL.requestId = 0; + }).send(); + _defaultHistoryTTL.period = period; } } // namespace Api diff --git a/Telegram/SourceFiles/api/api_self_destruct.h b/Telegram/SourceFiles/api/api_self_destruct.h index d9534a4234..bbde0e35cc 100644 --- a/Telegram/SourceFiles/api/api_self_destruct.h +++ b/Telegram/SourceFiles/api/api_self_destruct.h @@ -18,14 +18,24 @@ public: explicit SelfDestruct(not_null api); void reload(); - void update(int days); + void updateAccountTTL(int days); + void updateDefaultHistoryTTL(TimeId period); - rpl::producer days() const; + [[nodiscard]] rpl::producer daysAccountTTL() const; + [[nodiscard]] rpl::producer periodDefaultHistoryTTL() const; + [[nodiscard]] TimeId periodDefaultHistoryTTLCurrent() const; private: MTP::Sender _api; - mtpRequestId _requestId = 0; - rpl::variable _days = 0; + struct { + mtpRequestId requestId = 0; + rpl::variable days = 0; + } _accountTTL; + + struct { + mtpRequestId requestId = 0; + rpl::variable period = 0; + } _defaultHistoryTTL; }; diff --git a/Telegram/SourceFiles/boxes/self_destruction_box.cpp b/Telegram/SourceFiles/boxes/self_destruction_box.cpp index 5433b0c360..03d8a6155a 100644 --- a/Telegram/SourceFiles/boxes/self_destruction_box.cpp +++ b/Telegram/SourceFiles/boxes/self_destruction_box.cpp @@ -95,12 +95,13 @@ void SelfDestructionBox::showContent() { clearButtons(); addButton(tr::lng_settings_save(), [=] { + const auto value = _ttlGroup->value(); switch (_type) { case Type::Account: - _session->api().selfDestruct().update(_ttlGroup->value()); + _session->api().selfDestruct().updateAccountTTL(value); break; case Type::Sessions: - _session->api().authorizations().updateTTL(_ttlGroup->value()); + _session->api().authorizations().updateTTL(value); break; } diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index db62fae32c..7d51d969e5 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -520,10 +520,8 @@ void SetupSelfDestruction( session->api().selfDestruct().reload(); }, container->lifetime()); const auto label = [&] { - return session->api().selfDestruct().days( - ) | rpl::map( - SelfDestructionBox::DaysLabel - ); + return session->api().selfDestruct().daysAccountTTL( + ) | rpl::map(SelfDestructionBox::DaysLabel); }; AddButtonWithLabel( @@ -535,7 +533,7 @@ void SetupSelfDestruction( controller->show(Box( session, SelfDestructionBox::Type::Account, - session->api().selfDestruct().days())); + session->api().selfDestruct().daysAccountTTL())); }); AddSkip(container);