From 3e4ac35913e7fc7941ff7219cabbf52b54ddebc7 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 8 May 2022 23:04:46 +0300 Subject: [PATCH] Added ability to set recovery email from cloud password management. --- .../settings_cloud_password_common.h | 1 + .../settings_cloud_password_email.cpp | 24 +++++++++++++------ .../settings_cloud_password_manage.cpp | 23 ++++++++++++------ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h index ded3b1b5b..d8de83d29 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h @@ -32,6 +32,7 @@ struct StepData { QString hint; QString email; int unconfirmedEmailLengthCode; + bool setOnlyRecoveryEmail = false; }; void SetupHeader( diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp index 80565d969..6bdbeaf8a 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/cloud_password/settings_cloud_password_email.h" #include "api/api_cloud_password.h" +#include "core/core_cloud_password.h" #include "lang/lang_keys.h" #include "settings/cloud_password/settings_cloud_password_common.h" #include "settings/cloud_password/settings_cloud_password_email_confirm.h" @@ -45,13 +46,19 @@ void Email::setupContent() { const auto content = Ui::CreateChild(this); auto currentStepData = stepData(); const auto currentStepDataEmail = base::take(currentStepData.email); + const auto setOnly = base::take(currentStepData.setOnlyRecoveryEmail); setStepData(currentStepData); + const auto state = cloudPassword().stateCurrent(); + const auto hasRecovery = state && state->hasRecovery; + SetupHeader( content, u"cloud_password/email"_q, showFinishes(), - tr::lng_settings_cloud_password_email_subtitle(), + hasRecovery + ? tr::lng_settings_cloud_password_manage_email_change() + : tr::lng_settings_cloud_password_email_subtitle(), tr::lng_settings_cloud_password_email_about()); AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); @@ -69,12 +76,14 @@ void Email::setupContent() { const auto data = stepData(); - _requestLifetime = cloudPassword().set( - data.currentPassword, - data.password, - data.hint, - !data.email.isEmpty(), - data.email + _requestLifetime = (setOnly + ? cloudPassword().setEmail(data.currentPassword, data.email) + : cloudPassword().set( + data.currentPassword, + data.password, + data.hint, + !data.email.isEmpty(), + data.email) ) | rpl::start_with_next_error_done([=](Api::CloudPassword::SetOk d) { _requestLifetime.destroy(); @@ -134,6 +143,7 @@ void Email::setupContent() { skip->setClickedCallback([=] { confirm(QString()); }); + skip->setVisible(!setOnly); const auto button = AddDoneButton( content, diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_manage.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_manage.cpp index 984cd1258..93549c4da 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_manage.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_manage.cpp @@ -130,6 +130,16 @@ void Manage::setupContent() { } }, lifetime()); + const auto showOtherAndRememberPassword = [=](Type type) { + // Remember the current password to have ability + // to return from Change Password to Password Manage. + auto data = stepData(); + data.currentPassword = _currentPassword; + setStepData(std::move(data)); + + showOther(type); + }; + SetupTopContent(content, showFinishes()); AddSkip(content); @@ -139,13 +149,7 @@ void Manage::setupContent() { st::settingsButton, { &st::settingsIconKey, kIconLightBlue } )->setClickedCallback([=] { - // Remember the current password to have ability - // to return from Change Password to Password Manage. - auto data = stepData(); - data.currentPassword = _currentPassword; - setStepData(std::move(data)); - - showOther(CloudPasswordInputId()); + showOtherAndRememberPassword(CloudPasswordInputId()); }); AddButton( content, @@ -155,6 +159,11 @@ void Manage::setupContent() { st::settingsButton, { &st::settingsIconEmail, kIconLightOrange } )->setClickedCallback([=] { + auto data = stepData(); + data.setOnlyRecoveryEmail = true; + setStepData(std::move(data)); + + showOtherAndRememberPassword(CloudPasswordEmailId()); }); AddSkip(content);