mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Moved out part of common code for cloud password to td_ui.
This commit is contained in:
parent
2b13fc9a24
commit
2b71625ffe
13 changed files with 247 additions and 192 deletions
|
@ -1409,8 +1409,6 @@ PRIVATE
|
||||||
settings/business/settings_recipients_helper.h
|
settings/business/settings_recipients_helper.h
|
||||||
settings/business/settings_working_hours.cpp
|
settings/business/settings_working_hours.cpp
|
||||||
settings/business/settings_working_hours.h
|
settings/business/settings_working_hours.h
|
||||||
settings/cloud_password/settings_cloud_password_common.cpp
|
|
||||||
settings/cloud_password/settings_cloud_password_common.h
|
|
||||||
settings/cloud_password/settings_cloud_password_email.cpp
|
settings/cloud_password/settings_cloud_password_email.cpp
|
||||||
settings/cloud_password/settings_cloud_password_email.h
|
settings/cloud_password/settings_cloud_password_email.h
|
||||||
settings/cloud_password/settings_cloud_password_email_confirm.cpp
|
settings/cloud_password/settings_cloud_password_email_confirm.cpp
|
||||||
|
@ -1423,6 +1421,8 @@ PRIVATE
|
||||||
settings/cloud_password/settings_cloud_password_manage.h
|
settings/cloud_password/settings_cloud_password_manage.h
|
||||||
settings/cloud_password/settings_cloud_password_start.cpp
|
settings/cloud_password/settings_cloud_password_start.cpp
|
||||||
settings/cloud_password/settings_cloud_password_start.h
|
settings/cloud_password/settings_cloud_password_start.h
|
||||||
|
settings/cloud_password/settings_cloud_password_step.cpp
|
||||||
|
settings/cloud_password/settings_cloud_password_step.h
|
||||||
settings/settings_active_sessions.cpp
|
settings/settings_active_sessions.cpp
|
||||||
settings/settings_active_sessions.h
|
settings/settings_active_sessions.h
|
||||||
settings/settings_advanced.cpp
|
settings/settings_advanced.cpp
|
||||||
|
|
|
@ -7,28 +7,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
|
|
||||||
#include "apiwrap.h"
|
|
||||||
#include "base/timer.h"
|
|
||||||
#include "core/application.h"
|
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "lottie/lottie_icon.h"
|
#include "lottie/lottie_icon.h"
|
||||||
#include "main/main_session.h"
|
#include "settings/settings_common.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_email.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
|
||||||
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
|
||||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
|
||||||
#include "settings/cloud_password/settings_cloud_password_start.h"
|
|
||||||
#include "ui/boxes/confirm_box.h"
|
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/widgets/fields/input_field.h"
|
#include "ui/widgets/fields/input_field.h"
|
||||||
#include "ui/widgets/fields/password_input.h"
|
#include "ui/widgets/fields/password_input.h"
|
||||||
#include "ui/widgets/labels.h"
|
#include "ui/widgets/labels.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
#include "ui/wrap/vertical_layout.h"
|
||||||
#include "ui/vertical_list.h"
|
|
||||||
#include "window/window_session_controller.h"
|
|
||||||
#include "styles/style_boxes.h"
|
#include "styles/style_boxes.h"
|
||||||
#include "styles/style_layers.h"
|
|
||||||
#include "styles/style_settings.h"
|
#include "styles/style_settings.h"
|
||||||
|
|
||||||
namespace Settings::CloudPassword {
|
namespace Settings::CloudPassword {
|
||||||
|
@ -100,12 +88,15 @@ BottomButton CreateBottomDisableButton(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupAutoCloseTimer(rpl::lifetime &lifetime, Fn<void()> callback) {
|
void SetupAutoCloseTimer(
|
||||||
|
rpl::lifetime &lifetime,
|
||||||
|
Fn<void()> callback,
|
||||||
|
Fn<crl::time()> lastNonIdleTime) {
|
||||||
constexpr auto kTimerCheck = crl::time(1000 * 60);
|
constexpr auto kTimerCheck = crl::time(1000 * 60);
|
||||||
constexpr auto kAutoCloseTimeout = crl::time(1000 * 60 * 10);
|
constexpr auto kAutoCloseTimeout = crl::time(1000 * 60 * 10);
|
||||||
|
|
||||||
const auto timer = lifetime.make_state<base::Timer>([=] {
|
const auto timer = lifetime.make_state<base::Timer>([=] {
|
||||||
const auto idle = crl::now() - Core::App().lastNonIdleTime();
|
const auto idle = crl::now() - lastNonIdleTime();
|
||||||
if (idle >= kAutoCloseTimeout) {
|
if (idle >= kAutoCloseTimeout) {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
@ -269,105 +260,4 @@ void AddSkipInsteadOfError(not_null<Ui::VerticalLayout*> content) {
|
||||||
dummy = nullptr;
|
dummy = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractStep::AbstractStep(
|
|
||||||
QWidget *parent,
|
|
||||||
not_null<Window::SessionController*> controller)
|
|
||||||
: AbstractSection(parent)
|
|
||||||
, _controller(controller) {
|
|
||||||
}
|
|
||||||
|
|
||||||
not_null<Window::SessionController*> AbstractStep::controller() const {
|
|
||||||
return _controller;
|
|
||||||
}
|
|
||||||
|
|
||||||
Api::CloudPassword &AbstractStep::cloudPassword() {
|
|
||||||
return _controller->session().api().cloudPassword();
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<AbstractStep::Types> AbstractStep::removeTypes() {
|
|
||||||
return rpl::never<Types>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::showBack() {
|
|
||||||
_showBack.fire({});
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::showOther(Type type) {
|
|
||||||
_showOther.fire_copy(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::setFocusCallback(Fn<void()> callback) {
|
|
||||||
_setInnerFocusCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<> AbstractStep::showFinishes() const {
|
|
||||||
return _showFinished.events();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::showFinished() {
|
|
||||||
_showFinished.fire({});
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::setInnerFocus() {
|
|
||||||
if (_setInnerFocusCallback) {
|
|
||||||
_setInnerFocusCallback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AbstractStep::isPasswordInvalidError(const QString &type) {
|
|
||||||
if (type == u"PASSWORD_HASH_INVALID"_q
|
|
||||||
|| type == u"SRP_PASSWORD_CHANGED"_q) {
|
|
||||||
|
|
||||||
// Most likely the cloud password has been changed on another device.
|
|
||||||
// Quit.
|
|
||||||
_quits.fire(AbstractStep::Types{
|
|
||||||
CloudPasswordStartId(),
|
|
||||||
CloudPasswordInputId(),
|
|
||||||
CloudPasswordHintId(),
|
|
||||||
CloudPasswordEmailId(),
|
|
||||||
CloudPasswordEmailConfirmId(),
|
|
||||||
CloudPasswordManageId(),
|
|
||||||
});
|
|
||||||
controller()->show(
|
|
||||||
Ui::MakeInformBox(tr::lng_cloud_password_expired()),
|
|
||||||
Ui::LayerOption::CloseOther);
|
|
||||||
setStepData(StepData());
|
|
||||||
showBack();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<Type> AbstractStep::sectionShowOther() {
|
|
||||||
return _showOther.events();
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<> AbstractStep::sectionShowBack() {
|
|
||||||
return _showBack.events();
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<std::vector<Type>> AbstractStep::removeFromStack() {
|
|
||||||
return rpl::merge(removeTypes(), _quits.events());
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::setStepDataReference(std::any &data) {
|
|
||||||
_stepData = &data;
|
|
||||||
}
|
|
||||||
|
|
||||||
StepData AbstractStep::stepData() const {
|
|
||||||
if (!_stepData || !_stepData->has_value()) {
|
|
||||||
StepData();
|
|
||||||
}
|
|
||||||
const auto my = std::any_cast<StepData>(_stepData);
|
|
||||||
return my ? (*my) : StepData();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractStep::setStepData(StepData data) {
|
|
||||||
if (_stepData) {
|
|
||||||
*_stepData = data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractStep::~AbstractStep() = default;
|
|
||||||
|
|
||||||
} // namespace Settings::CloudPassword
|
} // namespace Settings::CloudPassword
|
||||||
|
|
|
@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "settings/settings_common_session.h"
|
#include "ui/text/text_variant.h"
|
||||||
#include "ui/widgets/box_content_divider.h"
|
#include "ui/widgets/box_content_divider.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -43,7 +43,10 @@ struct StepData {
|
||||||
ProcessRecover processRecover;
|
ProcessRecover processRecover;
|
||||||
};
|
};
|
||||||
|
|
||||||
void SetupAutoCloseTimer(rpl::lifetime &lifetime, Fn<void()> callback);
|
void SetupAutoCloseTimer(
|
||||||
|
rpl::lifetime &lifetime,
|
||||||
|
Fn<void()> callback,
|
||||||
|
Fn<crl::time()> lastNonIdleTime);
|
||||||
|
|
||||||
void SetupHeader(
|
void SetupHeader(
|
||||||
not_null<Ui::VerticalLayout*> content,
|
not_null<Ui::VerticalLayout*> content,
|
||||||
|
@ -102,73 +105,5 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class AbstractStep : public AbstractSection {
|
|
||||||
public:
|
|
||||||
using Types = std::vector<Type>;
|
|
||||||
AbstractStep(
|
|
||||||
QWidget *parent,
|
|
||||||
not_null<Window::SessionController*> controller);
|
|
||||||
~AbstractStep();
|
|
||||||
|
|
||||||
void showFinished() override final;
|
|
||||||
void setInnerFocus() override final;
|
|
||||||
[[nodiscard]] rpl::producer<Type> sectionShowOther() override final;
|
|
||||||
[[nodiscard]] rpl::producer<> sectionShowBack() override final;
|
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<Types> removeFromStack() override final;
|
|
||||||
|
|
||||||
void setStepDataReference(std::any &data) override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
[[nodiscard]] not_null<Window::SessionController*> controller() const;
|
|
||||||
[[nodiscard]] Api::CloudPassword &cloudPassword();
|
|
||||||
|
|
||||||
[[nodiscard]] virtual rpl::producer<Types> removeTypes();
|
|
||||||
|
|
||||||
bool isPasswordInvalidError(const QString &type);
|
|
||||||
|
|
||||||
void showBack();
|
|
||||||
void showOther(Type type);
|
|
||||||
|
|
||||||
void setFocusCallback(Fn<void()> callback);
|
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<> showFinishes() const;
|
|
||||||
|
|
||||||
StepData stepData() const;
|
|
||||||
void setStepData(StepData data);
|
|
||||||
|
|
||||||
private:
|
|
||||||
const not_null<Window::SessionController*> _controller;
|
|
||||||
|
|
||||||
Fn<void()> _setInnerFocusCallback;
|
|
||||||
|
|
||||||
rpl::event_stream<> _showFinished;
|
|
||||||
rpl::event_stream<Type> _showOther;
|
|
||||||
rpl::event_stream<> _showBack;
|
|
||||||
rpl::event_stream<Types> _quits;
|
|
||||||
|
|
||||||
std::any *_stepData;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename SectionType>
|
|
||||||
class TypedAbstractStep : public AbstractStep {
|
|
||||||
public:
|
|
||||||
using AbstractStep::AbstractStep;
|
|
||||||
|
|
||||||
void setStepDataReference(std::any &data) override final {
|
|
||||||
AbstractStep::setStepDataReference(data);
|
|
||||||
static_cast<SectionType*>(this)->setupContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] static Type Id() {
|
|
||||||
return SectionFactory<SectionType>::Instance();
|
|
||||||
}
|
|
||||||
[[nodiscard]] Type id() const final override {
|
|
||||||
return Id();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Settings::CloudPassword
|
} // namespace Settings::CloudPassword
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
|
|
|
@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_start.h"
|
#include "settings/cloud_password/settings_cloud_password_start.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "ui/text/format_values.h"
|
#include "ui/text/format_values.h"
|
||||||
|
|
|
@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_email.h"
|
#include "settings/cloud_password/settings_cloud_password_email.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/widgets/fields/input_field.h"
|
#include "ui/widgets/fields/input_field.h"
|
||||||
|
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "ui/text/format_values.h"
|
#include "ui/text/format_values.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
|
|
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
|
|
||||||
#include "api/api_cloud_password.h"
|
#include "api/api_cloud_password.h"
|
||||||
|
#include "core/application.h"
|
||||||
#include "core/core_cloud_password.h"
|
#include "core/core_cloud_password.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
|
@ -16,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_start.h"
|
#include "settings/cloud_password/settings_cloud_password_start.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
|
@ -97,7 +99,10 @@ void Manage::setupContent() {
|
||||||
showBack();
|
showBack();
|
||||||
};
|
};
|
||||||
|
|
||||||
SetupAutoCloseTimer(content->lifetime(), quit);
|
SetupAutoCloseTimer(
|
||||||
|
content->lifetime(),
|
||||||
|
quit,
|
||||||
|
[] { return Core::App().lastNonIdleTime(); });
|
||||||
|
|
||||||
const auto state = cloudPassword().stateCurrent();
|
const auto state = cloudPassword().stateCurrent();
|
||||||
if (!state) {
|
if (!state) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
#include "ui/wrap/vertical_layout.h"
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
/*
|
||||||
|
This file is part of Telegram Desktop,
|
||||||
|
the official desktop application for the Telegram messaging service.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
*/
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
|
|
||||||
|
#include "apiwrap.h"
|
||||||
|
#include "lang/lang_keys.h"
|
||||||
|
#include "main/main_session.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_email.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_start.h"
|
||||||
|
#include "ui/boxes/confirm_box.h"
|
||||||
|
#include "window/window_session_controller.h"
|
||||||
|
|
||||||
|
namespace Settings::CloudPassword {
|
||||||
|
|
||||||
|
AbstractStep::AbstractStep(
|
||||||
|
QWidget *parent,
|
||||||
|
not_null<Window::SessionController*> controller)
|
||||||
|
: AbstractSection(parent)
|
||||||
|
, _controller(controller) {
|
||||||
|
}
|
||||||
|
|
||||||
|
not_null<Window::SessionController*> AbstractStep::controller() const {
|
||||||
|
return _controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
Api::CloudPassword &AbstractStep::cloudPassword() {
|
||||||
|
return _controller->session().api().cloudPassword();
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<AbstractStep::Types> AbstractStep::removeTypes() {
|
||||||
|
return rpl::never<Types>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::showBack() {
|
||||||
|
_showBack.fire({});
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::showOther(Type type) {
|
||||||
|
_showOther.fire_copy(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::setFocusCallback(Fn<void()> callback) {
|
||||||
|
_setInnerFocusCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<> AbstractStep::showFinishes() const {
|
||||||
|
return _showFinished.events();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::showFinished() {
|
||||||
|
_showFinished.fire({});
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::setInnerFocus() {
|
||||||
|
if (_setInnerFocusCallback) {
|
||||||
|
_setInnerFocusCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AbstractStep::isPasswordInvalidError(const QString &type) {
|
||||||
|
if (type == u"PASSWORD_HASH_INVALID"_q
|
||||||
|
|| type == u"SRP_PASSWORD_CHANGED"_q) {
|
||||||
|
|
||||||
|
// Most likely the cloud password has been changed on another device.
|
||||||
|
// Quit.
|
||||||
|
_quits.fire(AbstractStep::Types{
|
||||||
|
CloudPasswordStartId(),
|
||||||
|
CloudPasswordInputId(),
|
||||||
|
CloudPasswordHintId(),
|
||||||
|
CloudPasswordEmailId(),
|
||||||
|
CloudPasswordEmailConfirmId(),
|
||||||
|
CloudPasswordManageId(),
|
||||||
|
});
|
||||||
|
controller()->show(
|
||||||
|
Ui::MakeInformBox(tr::lng_cloud_password_expired()),
|
||||||
|
Ui::LayerOption::CloseOther);
|
||||||
|
setStepData(StepData());
|
||||||
|
showBack();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<Type> AbstractStep::sectionShowOther() {
|
||||||
|
return _showOther.events();
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<> AbstractStep::sectionShowBack() {
|
||||||
|
return _showBack.events();
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<std::vector<Type>> AbstractStep::removeFromStack() {
|
||||||
|
return rpl::merge(removeTypes(), _quits.events());
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::setStepDataReference(std::any &data) {
|
||||||
|
_stepData = &data;
|
||||||
|
}
|
||||||
|
|
||||||
|
StepData AbstractStep::stepData() const {
|
||||||
|
if (!_stepData || !_stepData->has_value()) {
|
||||||
|
StepData();
|
||||||
|
}
|
||||||
|
const auto my = std::any_cast<StepData>(_stepData);
|
||||||
|
return my ? (*my) : StepData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractStep::setStepData(StepData data) {
|
||||||
|
if (_stepData) {
|
||||||
|
*_stepData = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractStep::~AbstractStep() = default;
|
||||||
|
|
||||||
|
} // namespace Settings::CloudPassword
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
This file is part of Telegram Desktop,
|
||||||
|
the official desktop application for the Telegram messaging service.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "settings/settings_common_session.h"
|
||||||
|
|
||||||
|
namespace Api {
|
||||||
|
class CloudPassword;
|
||||||
|
} // namespace Api
|
||||||
|
|
||||||
|
namespace Settings::CloudPassword {
|
||||||
|
|
||||||
|
struct StepData;
|
||||||
|
|
||||||
|
class AbstractStep : public AbstractSection {
|
||||||
|
public:
|
||||||
|
using Types = std::vector<Type>;
|
||||||
|
AbstractStep(
|
||||||
|
QWidget *parent,
|
||||||
|
not_null<Window::SessionController*> controller);
|
||||||
|
~AbstractStep();
|
||||||
|
|
||||||
|
void showFinished() override final;
|
||||||
|
void setInnerFocus() override final;
|
||||||
|
[[nodiscard]] rpl::producer<Type> sectionShowOther() override final;
|
||||||
|
[[nodiscard]] rpl::producer<> sectionShowBack() override final;
|
||||||
|
|
||||||
|
[[nodiscard]] rpl::producer<Types> removeFromStack() override final;
|
||||||
|
|
||||||
|
void setStepDataReference(std::any &data) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
[[nodiscard]] not_null<Window::SessionController*> controller() const;
|
||||||
|
[[nodiscard]] Api::CloudPassword &cloudPassword();
|
||||||
|
|
||||||
|
[[nodiscard]] virtual rpl::producer<Types> removeTypes();
|
||||||
|
|
||||||
|
bool isPasswordInvalidError(const QString &type);
|
||||||
|
|
||||||
|
void showBack();
|
||||||
|
void showOther(Type type);
|
||||||
|
|
||||||
|
void setFocusCallback(Fn<void()> callback);
|
||||||
|
|
||||||
|
[[nodiscard]] rpl::producer<> showFinishes() const;
|
||||||
|
|
||||||
|
StepData stepData() const;
|
||||||
|
void setStepData(StepData data);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const not_null<Window::SessionController*> _controller;
|
||||||
|
|
||||||
|
Fn<void()> _setInnerFocusCallback;
|
||||||
|
|
||||||
|
rpl::event_stream<> _showFinished;
|
||||||
|
rpl::event_stream<Type> _showOther;
|
||||||
|
rpl::event_stream<> _showBack;
|
||||||
|
rpl::event_stream<Types> _quits;
|
||||||
|
|
||||||
|
std::any *_stepData;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename SectionType>
|
||||||
|
class TypedAbstractStep : public AbstractStep {
|
||||||
|
public:
|
||||||
|
using AbstractStep::AbstractStep;
|
||||||
|
|
||||||
|
void setStepDataReference(std::any &data) override final {
|
||||||
|
AbstractStep::setStepDataReference(data);
|
||||||
|
static_cast<SectionType*>(this)->setupContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] static Type Id() {
|
||||||
|
return SectionFactory<SectionType>::Instance();
|
||||||
|
}
|
||||||
|
[[nodiscard]] Type id() const final override {
|
||||||
|
return Id();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Settings::CloudPassword
|
||||||
|
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||||
|
#include "settings/cloud_password/settings_cloud_password_step.h"
|
||||||
#include "storage/storage_domain.h"
|
#include "storage/storage_domain.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
|
@ -128,7 +129,8 @@ void LocalPasscodeEnter::setupContent() {
|
||||||
if (isChange) {
|
if (isChange) {
|
||||||
CloudPassword::SetupAutoCloseTimer(
|
CloudPassword::SetupAutoCloseTimer(
|
||||||
content->lifetime(),
|
content->lifetime(),
|
||||||
[=] { _showBack.fire({}); });
|
[=] { _showBack.fire({}); },
|
||||||
|
[] { return Core::App().lastNonIdleTime(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
Ui::AddSkip(content);
|
Ui::AddSkip(content);
|
||||||
|
@ -448,7 +450,8 @@ void LocalPasscodeManage::setupContent() {
|
||||||
|
|
||||||
CloudPassword::SetupAutoCloseTimer(
|
CloudPassword::SetupAutoCloseTimer(
|
||||||
content->lifetime(),
|
content->lifetime(),
|
||||||
[=] { _showBack.fire({}); });
|
[=] { _showBack.fire({}); },
|
||||||
|
[] { return Core::App().lastNonIdleTime(); });
|
||||||
|
|
||||||
Ui::AddSkip(content);
|
Ui::AddSkip(content);
|
||||||
|
|
||||||
|
|
|
@ -224,6 +224,8 @@ PRIVATE
|
||||||
|
|
||||||
settings/settings_common.cpp
|
settings/settings_common.cpp
|
||||||
settings/settings_common.h
|
settings/settings_common.h
|
||||||
|
settings/cloud_password/settings_cloud_password_common.cpp
|
||||||
|
settings/cloud_password/settings_cloud_password_common.h
|
||||||
|
|
||||||
statistics/chart_lines_filter_controller.cpp
|
statistics/chart_lines_filter_controller.cpp
|
||||||
statistics/chart_lines_filter_controller.h
|
statistics/chart_lines_filter_controller.h
|
||||||
|
|
Loading…
Add table
Reference in a new issue