From 54dd63d61aad99f586725bb1b1c1d0c49b406add Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 25 May 2021 23:38:01 +0300 Subject: [PATCH] Removed LocalPasscode global variable from facades. --- Telegram/SourceFiles/boxes/passcode_box.cpp | 16 ++++++---- Telegram/SourceFiles/core/application.cpp | 6 ++-- .../SourceFiles/dialogs/dialogs_widget.cpp | 15 +++++++--- Telegram/SourceFiles/facades.cpp | 6 ---- Telegram/SourceFiles/facades.h | 3 -- Telegram/SourceFiles/main/main_domain.cpp | 2 +- .../settings/settings_advanced.cpp | 29 ++++++++++++------- .../SourceFiles/settings/settings_advanced.h | 4 ++- .../SourceFiles/settings/settings_intro.cpp | 4 ++- .../settings/settings_privacy_security.cpp | 19 +++++------- .../details/storage_settings_scheme.cpp | 1 - .../SourceFiles/storage/storage_domain.cpp | 14 +++++++-- Telegram/SourceFiles/storage/storage_domain.h | 6 ++++ 13 files changed, 74 insertions(+), 51 deletions(-) diff --git a/Telegram/SourceFiles/boxes/passcode_box.cpp b/Telegram/SourceFiles/boxes/passcode_box.cpp index 83ac3f351..3ef8be565 100644 --- a/Telegram/SourceFiles/boxes/passcode_box.cpp +++ b/Telegram/SourceFiles/boxes/passcode_box.cpp @@ -27,7 +27,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "passport/passport_encryption.h" #include "passport/passport_panel_edit_contact.h" #include "settings/settings_privacy_security.h" -#include "facades.h" #include "styles/style_layers.h" #include "styles/style_passport.h" #include "styles/style_boxes.h" @@ -119,7 +118,12 @@ PasscodeBox::PasscodeBox( , _turningOff(turningOff) , _about(st::boxWidth - st::boxPadding.left() * 1.5) , _oldPasscode(this, st::defaultInputField, tr::lng_passcode_enter_old()) -, _newPasscode(this, st::defaultInputField, Global::LocalPasscode() ? tr::lng_passcode_enter_new() : tr::lng_passcode_enter_first()) +, _newPasscode( + this, + st::defaultInputField, + session->domain().local().hasLocalPasscode() + ? tr::lng_passcode_enter_new() + : tr::lng_passcode_enter_first()) , _reenterPasscode(this, st::defaultInputField, tr::lng_passcode_confirm_new()) , _passwordHint(this, st::defaultInputField, tr::lng_cloud_password_hint()) , _recoverEmail(this, st::defaultInputField, tr::lng_cloud_password_email()) @@ -164,7 +168,9 @@ rpl::producer<> PasscodeBox::clearUnconfirmedPassword() const { } bool PasscodeBox::currentlyHave() const { - return _cloudPwd ? (!!_cloudFields.curRequest) : Global::LocalPasscode(); + return _cloudPwd + ? (!!_cloudFields.curRequest) + : _session->domain().local().hasLocalPasscode(); } bool PasscodeBox::onlyCheckCurrent() const { @@ -520,7 +526,7 @@ void PasscodeBox::save(bool force) { return; } - if (Core::App().domain().local().checkPasscode(old.toUtf8())) { + if (_session->domain().local().checkPasscode(old.toUtf8())) { cSetPasscodeBadTries(0); if (_turningOff) pwd = conf = QString(); } else { @@ -588,7 +594,7 @@ void PasscodeBox::save(bool force) { closeReplacedBy(); const auto weak = Ui::MakeWeak(this); cSetPasscodeBadTries(0); - Core::App().domain().local().setPasscode(pwd.toUtf8()); + _session->domain().local().setPasscode(pwd.toUtf8()); Core::App().localPasscodeChanged(); if (weak) { closeBox(); diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 7577ede6d..8479b51e8 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -321,8 +321,6 @@ void Application::startDomain() { startSettingsAndBackground(); } if (state != Storage::StartResult::Success) { - Global::SetLocalPasscode(true); - Global::RefLocalPasscodeChanged().notify(); lockByPasscode(); DEBUG_LOG(("Application Info: passcode needed...")); } @@ -910,7 +908,7 @@ bool Application::someSessionExists() const { } void Application::checkAutoLock() { - if (!Global::LocalPasscode() + if (!_domain->local().hasLocalPasscode() || passcodeLocked() || !someSessionExists()) { _shouldLockAt = 0; @@ -1146,7 +1144,7 @@ void Application::startShortcuts() { return true; }); request->check(Command::Lock) && request->handle([=] { - if (!passcodeLocked() && Global::LocalPasscode()) { + if (!passcodeLocked() && _domain->local().hasLocalPasscode()) { lockByPasscode(); return true; } diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 7961faf75..820b0f194 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "mainwindow.h" #include "mainwidget.h" +#include "main/main_domain.h" #include "main/main_session.h" #include "main/main_session_settings.h" #include "apiwrap.h" @@ -34,6 +35,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_main_menu.h" #include "storage/storage_media_prepare.h" #include "storage/storage_account.h" +#include "storage/storage_domain.h" #include "data/data_session.h" #include "data/data_channel.h" #include "data/data_chat.h" @@ -268,8 +270,13 @@ Widget::Widget( _cancelSearch->setClickedCallback([this] { onCancelSearch(); }); _jumpToDate->entity()->setClickedCallback([this] { showJumpToDate(); }); _chooseFromUser->entity()->setClickedCallback([this] { showSearchFrom(); }); - _lockUnlock->setVisible(Global::LocalPasscode()); - subscribe(Global::RefLocalPasscodeChanged(), [this] { updateLockUnlockVisibility(); }); + rpl::single( + rpl::empty_value() + ) | rpl::then( + session().domain().local().localPasscodeChanged() + ) | rpl::start_with_next([=] { + updateLockUnlockVisibility(); + }, lifetime()); _lockUnlock->setClickedCallback([this] { _lockUnlock->setIconOverride(&st::dialogsUnlockIcon, &st::dialogsUnlockIconOver); Core::App().lockByPasscode(); @@ -1502,7 +1509,7 @@ void Widget::updateLockUnlockVisibility() { if (_a_show.animating()) { return; } - const auto hidden = !Global::LocalPasscode(); + const auto hidden = !session().domain().local().hasLocalPasscode(); if (_lockUnlock->isHidden() != hidden) { _lockUnlock->setVisible(!hidden); updateControlsGeometry(); @@ -1560,7 +1567,7 @@ void Widget::updateControlsGeometry() { auto smallLayoutWidth = (st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPadding.x()); auto smallLayoutRatio = (width() < st::columnMinimalWidthLeft) ? (st::columnMinimalWidthLeft - width()) / float64(st::columnMinimalWidthLeft - smallLayoutWidth) : 0.; auto filterLeft = (controller()->filtersWidth() ? st::dialogsFilterSkip : st::dialogsFilterPadding.x() + _mainMenuToggle->width()) + st::dialogsFilterPadding.x(); - auto filterRight = (Global::LocalPasscode() ? (st::dialogsFilterPadding.x() + _lockUnlock->width()) : st::dialogsFilterSkip) + st::dialogsFilterPadding.x(); + auto filterRight = (_lockUnlock->isVisible() ? (st::dialogsFilterPadding.x() + _lockUnlock->width()) : st::dialogsFilterSkip) + st::dialogsFilterPadding.x(); auto filterWidth = qMax(width(), st::columnMinimalWidthLeft) - filterLeft - filterRight; auto filterAreaHeight = st::topBarHeight; _searchControls->setGeometry(0, filterAreaTop, width(), filterAreaHeight); diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index 280936440..16cf6dcfe 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -352,9 +352,6 @@ struct Data { bool UseProxyForCalls = false; base::Observable ConnectionTypeChanged; - bool LocalPasscode = false; - base::Observable LocalPasscodeChanged; - base::Variable WorkMode = { dbiwmWindowAndTray }; }; @@ -392,9 +389,6 @@ DefineVar(Global, MTP::ProxyData::Settings, ProxySettings); DefineVar(Global, bool, UseProxyForCalls); DefineRefVar(Global, base::Observable, ConnectionTypeChanged); -DefineVar(Global, bool, LocalPasscode); -DefineRefVar(Global, base::Observable, LocalPasscodeChanged); - DefineRefVar(Global, base::Variable, WorkMode); } // namespace Global diff --git a/Telegram/SourceFiles/facades.h b/Telegram/SourceFiles/facades.h index 4853b8e6d..35c5ae2a3 100644 --- a/Telegram/SourceFiles/facades.h +++ b/Telegram/SourceFiles/facades.h @@ -124,9 +124,6 @@ DeclareVar(MTP::ProxyData::Settings, ProxySettings); DeclareVar(bool, UseProxyForCalls); DeclareRefVar(base::Observable, ConnectionTypeChanged); -DeclareVar(bool, LocalPasscode); -DeclareRefVar(base::Observable, LocalPasscodeChanged); - DeclareRefVar(base::Variable, WorkMode); } // namespace Global diff --git a/Telegram/SourceFiles/main/main_domain.cpp b/Telegram/SourceFiles/main/main_domain.cpp index 672da38dc..055f3873e 100644 --- a/Telegram/SourceFiles/main/main_domain.cpp +++ b/Telegram/SourceFiles/main/main_domain.cpp @@ -340,7 +340,7 @@ bool Domain::removePasscodeIfEmpty() { return false; } Local::reset(); - if (!Global::LocalPasscode()) { + if (!_local->hasLocalPasscode()) { return false; } // We completely logged out, remove the passcode if it was there. diff --git a/Telegram/SourceFiles/settings/settings_advanced.cpp b/Telegram/SourceFiles/settings/settings_advanced.cpp index 9fabbcfae..ac0f18121 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/settings_advanced.cpp @@ -27,8 +27,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/update_checker.h" #include "core/application.h" #include "storage/localstorage.h" +#include "storage/storage_domain.h" #include "data/data_session.h" #include "main/main_account.h" +#include "main/main_domain.h" #include "main/main_session.h" #include "mtproto/facade.h" #include "facades.h" @@ -313,7 +315,9 @@ void SetupSpellchecker( #endif // !TDESKTOP_DISABLE_SPELLCHECK } -void SetupSystemIntegrationContent(not_null container) { +void SetupSystemIntegrationContent( + Window::SessionController *controller, + not_null container) { const auto checkbox = [&](rpl::producer &&label, bool checked) { return object_ptr( container, @@ -409,9 +413,10 @@ void SetupSystemIntegrationContent(not_null container) { Core::App().saveSettingsDelayed(); }, nativeFrame->lifetime()); } - if (Platform::AutostartSupported()) { - const auto minimizedToggled = [] { - return cStartMinimized() && !Global::LocalPasscode(); + if (Platform::AutostartSupported() && controller) { + const auto minimizedToggled = [=] { + return cStartMinimized() + && !controller->session().domain().local().hasLocalPasscode(); }; const auto autostart = addCheckbox( @@ -441,7 +446,7 @@ void SetupSystemIntegrationContent(not_null container) { ) | rpl::filter([=](bool checked) { return (checked != minimizedToggled()); }) | rpl::start_with_next([=](bool checked) { - if (Global::LocalPasscode()) { + if (controller->session().domain().local().hasLocalPasscode()) { minimized->entity()->setChecked(false); Ui::show(Box( tr::lng_error_start_minimized_passcoded(tr::now))); @@ -451,8 +456,7 @@ void SetupSystemIntegrationContent(not_null container) { } }, minimized->lifetime()); - base::ObservableViewer( - Global::RefLocalPasscodeChanged() + controller->session().domain().local().localPasscodeChanged( ) | rpl::start_with_next([=] { minimized->entity()->setChecked(minimizedToggled()); }, minimized->lifetime()); @@ -474,9 +478,11 @@ void SetupSystemIntegrationContent(not_null container) { } } -void SetupSystemIntegrationOptions(not_null container) { +void SetupSystemIntegrationOptions( + not_null controller, + not_null container) { auto wrap = object_ptr(container); - SetupSystemIntegrationContent(wrap.data()); + SetupSystemIntegrationContent(controller, wrap.data()); if (wrap->count() > 0) { container->add(object_ptr( container, @@ -544,6 +550,7 @@ void SetupPerformance( } void SetupSystemIntegration( + not_null controller, not_null container, Fn showOther) { AddDivider(container); @@ -556,7 +563,7 @@ void SetupSystemIntegration( )->addClickHandler([=] { showOther(Type::Calls); }); - SetupSystemIntegrationOptions(container); + SetupSystemIntegrationOptions(controller, container); AddSkip(container); } @@ -601,7 +608,7 @@ void Advanced::setupContent(not_null controller) { AddSkip(content); SetupDataStorage(controller, content); SetupAutoDownload(controller, content); - SetupSystemIntegration(content, [=](Type type) { + SetupSystemIntegration(controller, content, [=](Type type) { _showOther.fire_copy(type); }); diff --git a/Telegram/SourceFiles/settings/settings_advanced.h b/Telegram/SourceFiles/settings/settings_advanced.h index 220b8be1a..a763263a4 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.h +++ b/Telegram/SourceFiles/settings/settings_advanced.h @@ -20,7 +20,9 @@ void SetupConnectionType( not_null container); bool HasUpdate(); void SetupUpdate(not_null container); -void SetupSystemIntegrationContent(not_null container); +void SetupSystemIntegrationContent( + Window::SessionController *controller, + not_null container); void SetupAnimations(not_null container); class Advanced : public Section { diff --git a/Telegram/SourceFiles/settings/settings_intro.cpp b/Telegram/SourceFiles/settings/settings_intro.cpp index ec7f1cdbb..a3727937d 100644 --- a/Telegram/SourceFiles/settings/settings_intro.cpp +++ b/Telegram/SourceFiles/settings/settings_intro.cpp @@ -75,7 +75,9 @@ object_ptr CreateIntroSettings( } { auto wrap = object_ptr(result); - SetupSystemIntegrationContent(wrap.data()); + SetupSystemIntegrationContent( + window->sessionController(), + wrap.data()); if (wrap->count() > 0) { AddDivider(result); AddSkip(result); diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index aabb4b1e0..b5f0d5bb7 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -39,7 +39,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_session.h" #include "data/data_chat.h" #include "data/data_channel.h" +#include "main/main_domain.h" #include "main/main_session.h" +#include "storage/storage_domain.h" #include "window/window_session_controller.h" #include "apiwrap.h" #include "facades.h" @@ -56,14 +58,6 @@ constexpr auto kUpdateTimeout = 60 * crl::time(1000); using Privacy = ApiWrap::Privacy; -rpl::producer<> PasscodeChanges() { - return rpl::single( - rpl::empty_value() - ) | rpl::then(base::ObservableViewer( - Global::RefLocalPasscodeChanged() - )); -} - QString PrivacyBase(Privacy::Key key, Privacy::Option option) { using Key = Privacy::Key; using Option = Privacy::Option; @@ -257,9 +251,12 @@ void SetupLocalPasscode( AddSkip(container); AddSubsectionTitle(container, tr::lng_settings_passcode_title()); - auto has = PasscodeChanges( - ) | rpl::map([] { - return Global::LocalPasscode(); + auto has = rpl::single( + rpl::empty_value() + ) | rpl::then( + controller->session().domain().local().localPasscodeChanged() + ) | rpl::map([=] { + return controller->session().domain().local().hasLocalPasscode(); }); auto text = rpl::combine( tr::lng_passcode_change(), diff --git a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp index f72701847..281fafdd8 100644 --- a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp +++ b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp @@ -838,7 +838,6 @@ bool ReadSetting( if (!CheckStreamStatus(stream)) return false; Core::App().settings().setAutoLock(v); - Global::RefLocalPasscodeChanged().notify(); context.legacyRead = true; } break; diff --git a/Telegram/SourceFiles/storage/storage_domain.cpp b/Telegram/SourceFiles/storage/storage_domain.cpp index 8528d4e43..2066fa5ef 100644 --- a/Telegram/SourceFiles/storage/storage_domain.cpp +++ b/Telegram/SourceFiles/storage/storage_domain.cpp @@ -12,7 +12,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mtproto/mtproto_config.h" #include "main/main_domain.h" #include "main/main_account.h" -#include "facades.h" namespace Storage { namespace { @@ -116,6 +115,7 @@ void Domain::encryptLocalKey(const QByteArray &passcode) { EncryptedDescriptor passKeyData(MTP::AuthKey::kSize); _localKey->write(passKeyData.stream); _passcodeKeyEncrypted = PrepareEncrypted(passKeyData, _passcodeKey); + _hasLocalPasscode = !passcode.isEmpty(); } Domain::StartModernResult Domain::startModern( @@ -156,6 +156,7 @@ Domain::StartModernResult Domain::startModern( _passcodeKeyEncrypted = keyEncrypted; _passcodeKeySalt = salt; + _hasLocalPasscode = !passcode.isEmpty(); if (!DecryptLocal(info, infoEncrypted, _localKey)) { LOG(("App Error: could not decrypt info.")); @@ -261,8 +262,7 @@ void Domain::setPasscode(const QByteArray &passcode) { encryptLocalKey(passcode); writeAccounts(); - Global::SetLocalPasscode(!passcode.isEmpty()); - Global::RefLocalPasscodeChanged().notify(); + _passcodeKeyChanged.fire({}); } int Domain::oldVersion() const { @@ -277,4 +277,12 @@ QString Domain::webviewDataPath() const { return BaseGlobalPath() + "webview"; } +rpl::producer<> Domain::localPasscodeChanged() const { + return _passcodeKeyChanged.events(); +} + +bool Domain::hasLocalPasscode() const { + return _hasLocalPasscode; +} + } // namespace Storage diff --git a/Telegram/SourceFiles/storage/storage_domain.h b/Telegram/SourceFiles/storage/storage_domain.h index 33e9ada85..300833091 100644 --- a/Telegram/SourceFiles/storage/storage_domain.h +++ b/Telegram/SourceFiles/storage/storage_domain.h @@ -46,6 +46,9 @@ public: [[nodiscard]] QString webviewDataPath() const; + [[nodiscard]] rpl::producer<> localPasscodeChanged() const; + [[nodiscard]] bool hasLocalPasscode() const; + private: enum class StartModernResult { Success, @@ -70,6 +73,9 @@ private: QByteArray _passcodeKeyEncrypted; int _oldVersion = 0; + bool _hasLocalPasscode = false; + rpl::event_stream<> _passcodeKeyChanged; + }; } // namespace Storage