diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 3eeda69612..3a4bfd5308 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1601,8 +1601,8 @@ PRIVATE settings/settings_type.h settings/sections/settings_shortcuts.cpp settings/sections/settings_shortcuts.h - settings/settings_websites.cpp - settings/settings_websites.h + settings/sections/settings_websites.cpp + settings/sections/settings_websites.h storage/details/storage_file_utilities.cpp storage/details/storage_file_utilities.h storage/details/storage_settings_scheme.cpp diff --git a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp index bf549c9d3d..6da61e78c3 100644 --- a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp +++ b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp @@ -64,7 +64,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/sections/settings_premium.h" #include "ui/power_saving.h" #include "settings/sections/settings_privacy_security.h" -#include "settings/settings_websites.h" +#include "settings/sections/settings_websites.h" #include "boxes/connection_box.h" #include "boxes/local_storage_box.h" #include "mainwindow.h" diff --git a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp index b02c6b36d4..5cbcab56d8 100644 --- a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp @@ -50,7 +50,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/sections/settings_passkeys.h" #include "settings/sections/settings_premium.h" #include "settings/settings_privacy_controllers.h" -#include "settings/settings_websites.h" +#include "settings/sections/settings_websites.h" #include "storage/storage_domain.h" #include "ui/boxes/confirm_box.h" #include "ui/effects/premium_graphics.h" diff --git a/Telegram/SourceFiles/settings/settings_websites.cpp b/Telegram/SourceFiles/settings/sections/settings_websites.cpp similarity index 93% rename from Telegram/SourceFiles/settings/settings_websites.cpp rename to Telegram/SourceFiles/settings/sections/settings_websites.cpp index 9fdf7112bd..95a72df416 100644 --- a/Telegram/SourceFiles/settings/settings_websites.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_websites.cpp @@ -5,16 +5,18 @@ 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/settings_websites.h" +#include "settings/sections/settings_websites.h" #include "api/api_websites.h" #include "apiwrap.h" #include "boxes/peer_list_box.h" #include "data/data_user.h" -#include "ui/boxes/confirm_box.h" #include "lang/lang_keys.h" #include "main/main_session.h" #include "settings/sections/settings_active_sessions.h" +#include "settings/sections/settings_privacy_security.h" +#include "settings/settings_builder.h" +#include "ui/boxes/confirm_box.h" #include "ui/controls/userpic_button.h" #include "ui/widgets/checkbox.h" #include "ui/wrap/slide_wrap.h" @@ -29,8 +31,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #include "styles/style_menu_icons.h" +namespace Settings { namespace { +using namespace Builder; + constexpr auto kShortPollTimeout = 60 * crl::time(1000); using EntryData = Api::Websites::Entry; @@ -136,7 +141,6 @@ void InfoBox( style::margins(0, 0, 0, st::sessionDateSkip), style::al_top); - using namespace Settings; const auto container = box->verticalLayout(); Ui::AddDivider(container); Ui::AddSkip(container, st::sessionSubtitleSkip); @@ -330,9 +334,9 @@ class Content::ListController final , public RowDelegate , public base::has_weak_ptr { public: - explicit ListController(not_null session); + explicit ListController(not_null<::Main::Session*> session); - Main::Session &session() const override; + ::Main::Session &session() const override; void prepare() override; void rowClicked(not_null row) override; void rowElementClicked(not_null row, int element) override; @@ -346,11 +350,11 @@ public: [[nodiscard]] static std::unique_ptr Add( not_null container, - not_null session, + not_null<::Main::Session*> session, style::margins margins = {}); private: - const not_null _session; + const not_null<::Main::Session*> _session; rpl::event_stream _terminateRequests; rpl::event_stream _itemsCount; @@ -569,7 +573,6 @@ Content::Inner::Inner( } void Content::Inner::setupContent() { - using namespace Settings; using namespace rpl::mappers; const auto content = Ui::CreateChild(this); @@ -640,11 +643,11 @@ Ui::RpWidget *Content::Inner::terminateAllButton() const { } Content::ListController::ListController( - not_null session) + not_null<::Main::Session*> session) : _session(session) { } -Main::Session &Content::ListController::session() const { +::Main::Session &Content::ListController::session() const { return *_session; } @@ -717,7 +720,7 @@ rpl::producer Content::ListController::showRequests() const { auto Content::ListController::Add( not_null container, - not_null session, + not_null<::Main::Session*> session, style::margins margins) -> std::unique_ptr { auto &lifetime = container->lifetime(); @@ -736,9 +739,33 @@ auto Content::ListController::Add( return controller; } -} // namespace +void BuildWebsitesSection(SectionBuilder &builder) { + builder.add(nullptr, [] { + return SearchEntry{ + .id = u"websites/disconnect-all"_q, + .title = tr::lng_settings_disconnect_all(tr::now), + .keywords = { u"disconnect"_q, u"terminate"_q, u"logout"_q }, + }; + }); + builder.add(nullptr, [] { + return SearchEntry{ + .id = u"websites/list"_q, + .title = tr::lng_settings_logged_in_title(tr::now), + .keywords = { u"websites"_q, u"bots"_q, u"logged"_q }, + }; + }); +} -namespace Settings { +const auto kMeta = BuildHelper({ + .id = Websites::Id(), + .parentId = PrivacySecurity::Id(), + .title = &tr::lng_settings_connected_title, + .icon = &st::menuIconIpAddress, +}, [](SectionBuilder &builder) { + BuildWebsitesSection(builder); +}); + +} // namespace Websites::Websites( QWidget *parent, @@ -752,6 +779,7 @@ rpl::producer Websites::title() { } void Websites::showFinished() { + Section::showFinished(); controller()->checkHighlightControl( u"websites/disconnect-all"_q, _terminateAll.data()); @@ -766,7 +794,14 @@ void Websites::setupContent() { _terminateAll = content->terminateAllButton(); + build(container, Builder::WebsitesSection); + Ui::ResizeFitChild(this, container); } +namespace Builder { + +SectionBuildMethod WebsitesSection = kMeta.build; + +} // namespace Builder } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_websites.h b/Telegram/SourceFiles/settings/sections/settings_websites.h similarity index 84% rename from Telegram/SourceFiles/settings/settings_websites.h rename to Telegram/SourceFiles/settings/sections/settings_websites.h index cb21ae6631..cf209b06a5 100644 --- a/Telegram/SourceFiles/settings/settings_websites.h +++ b/Telegram/SourceFiles/settings/sections/settings_websites.h @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "settings/settings_common_session.h" +#include "settings/settings_type.h" namespace Ui { class RpWidget; @@ -21,9 +22,10 @@ public: QWidget *parent, not_null controller); - [[nodiscard]] rpl::producer title() override; void showFinished() override; + [[nodiscard]] rpl::producer title() override; + private: void setupContent(); @@ -31,4 +33,9 @@ private: }; +namespace Builder { + +extern SectionBuildMethod WebsitesSection; + +} // namespace Builder } // namespace Settings