diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 4988f34b3..97337d1a4 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -508,6 +508,8 @@ PRIVATE data/data_drafts.h data/data_emoji_statuses.cpp data/data_emoji_statuses.h + data/data_faq.cpp + data/data_faq.h data/data_folder.cpp data/data_folder.h data/data_forum.cpp diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index fabd9238f..74b1518ab 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1068,6 +1068,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_faq_button" = "Go to FAQ"; "lng_settings_ask_ok" = "Ask a Volunteer"; "lng_settings_faq" = "Telegram FAQ"; +"lng_settings_faq_link" = "https://telegram.org/faq#general-questions"; "lng_settings_features" = "Telegram Features"; "lng_settings_logout" = "Log Out"; "lng_sure_logout" = "Are you sure you want to log out?"; diff --git a/Telegram/SourceFiles/data/data_birthday.cpp b/Telegram/SourceFiles/data/data_birthday.cpp index 65707664f..34a2b0737 100644 --- a/Telegram/SourceFiles/data/data_birthday.cpp +++ b/Telegram/SourceFiles/data/data_birthday.cpp @@ -127,4 +127,3 @@ rpl::producer IsBirthdayTodayValue(Birthday date) { } } // namespace Data - diff --git a/Telegram/SourceFiles/data/data_faq.cpp b/Telegram/SourceFiles/data/data_faq.cpp new file mode 100644 index 000000000..97ef86459 --- /dev/null +++ b/Telegram/SourceFiles/data/data_faq.cpp @@ -0,0 +1,53 @@ +/* +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 "data/data_faq.h" + +#include "apiwrap.h" +#include "core/application.h" +#include "data/data_session.h" +#include "data/data_web_page.h" +#include "iv/iv_instance.h" +#include "lang/lang_keys.h" +#include "main/main_session.h" +#include "main/session/session_show.h" +#include "ui/basic_click_handlers.h" + +namespace Data { + +void Faq::open(std::shared_ptr show) { + if (!_id) { + show->session().api().request(MTPmessages_GetWebPage( + MTP_string(tr::lng_settings_faq_link(tr::now)), + MTP_int(0) + )).done([=](const MTPmessages_WebPage &result) { + show->session().data().processUsers(result.data().vusers()); + show->session().data().processChats(result.data().vchats()); + const auto page = show->session().data().processWebpage( + result.data().vwebpage()); + if (page && page->iv) { + _id = page->id; + open(show); + } else { + UrlClickHandler::Open(tr::lng_settings_faq_link(tr::now)); + } + }).fail([=] { + UrlClickHandler::Open(tr::lng_settings_faq_link(tr::now)); + }).send(); + } else { + const auto page = show->session().data().webpage(_id); + if (page && page->iv) { + const auto parts = tr::lng_settings_faq_link(tr::now).split('#'); + const auto hash = (parts.size() > 1) ? parts[1] : u""_q; + Core::App().iv().show(show, page->iv.get(), hash); + } else { + UrlClickHandler::Open(tr::lng_settings_faq_link(tr::now)); + } + } +} + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_faq.h b/Telegram/SourceFiles/data/data_faq.h new file mode 100644 index 000000000..7e0179c3b --- /dev/null +++ b/Telegram/SourceFiles/data/data_faq.h @@ -0,0 +1,27 @@ +/* +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 + +namespace Main { +class SessionShow; +} // namespace Main + +namespace Data { + +class Faq final { +public: + constexpr Faq() = default; + + void open(std::shared_ptr show); + +private: + WebPageId _id = 0; + +}; + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h index 0f7df77f4..41aa27570 100644 --- a/Telegram/SourceFiles/data/data_session.h +++ b/Telegram/SourceFiles/data/data_session.h @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "storage/storage_databases.h" #include "dialogs/dialogs_main_list.h" #include "data/data_groups.h" +#include "data/data_faq.h" #include "data/data_cloud_file.h" #include "history/history_location_manager.h" #include "base/timer.h" @@ -101,6 +102,9 @@ public: [[nodiscard]] const Groups &groups() const { return _groups; } + [[nodiscard]] Faq &faq() { + return _faq; + } [[nodiscard]] ChatFilters &chatsFilters() const { return *_chatsFilters; } @@ -1068,6 +1072,7 @@ private: mtpRequestId> _viewAsMessagesRequests; Groups _groups; + Faq _faq; const std::unique_ptr _chatsFilters; const std::unique_ptr _cloudThemes; const std::unique_ptr _sendActionManager; diff --git a/Telegram/SourceFiles/settings/settings_intro.cpp b/Telegram/SourceFiles/settings/settings_intro.cpp index bd38b8c3f..28665c913 100644 --- a/Telegram/SourceFiles/settings/settings_intro.cpp +++ b/Telegram/SourceFiles/settings/settings_intro.cpp @@ -11,10 +11,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_main.h" #include "settings/settings_chat.h" #include "settings/settings_codes.h" +#include "ui/basic_click_handlers.h" #include "ui/wrap/fade_wrap.h" #include "ui/wrap/vertical_layout.h" #include "ui/widgets/shadow.h" -#include "ui/widgets/labels.h" #include "ui/widgets/buttons.h" #include "ui/widgets/scroll_area.h" #include "ui/cached_round_corners.h" @@ -104,7 +104,14 @@ object_ptr CreateIntroSettings( Ui::AddDivider(result); Ui::AddSkip(result); - SetupFaq(result, false); + + AddButtonWithIcon( + result, + tr::lng_settings_faq(), + st::settingsButtonNoIcon + )->addClickHandler([] { + UrlClickHandler::Open(tr::lng_telegram_features_url(tr::now)); + }); return result; } diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index 896a38a6b..4b2469b71 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -26,13 +26,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/basic_click_handlers.h" #include "ui/boxes/confirm_box.h" #include "ui/controls/userpic_button.h" -#include "ui/wrap/vertical_layout.h" #include "ui/wrap/slide_wrap.h" -#include "ui/wrap/padding_wrap.h" #include "ui/widgets/menu/menu_add_action_callback.h" -#include "ui/widgets/labels.h" #include "ui/widgets/continuous_sliders.h" -#include "ui/widgets/buttons.h" #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" #include "ui/new_badges.h" @@ -43,9 +39,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_session.h" #include "data/data_cloud_themes.h" #include "data/data_chat_filters.h" -#include "data/data_peer_values.h" // Data::AmPremiumValue #include "lang/lang_cloud_manager.h" -#include "lang/lang_keys.h" #include "lang/lang_instance.h" #include "storage/localstorage.h" #include "main/main_session.h" @@ -62,13 +56,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/profile/info_profile_values.h" #include "window/window_controller.h" #include "window/window_session_controller.h" -#include "core/file_utilities.h" -#include "core/application.h" #include "base/call_delayed.h" -#include "base/unixtime.h" #include "base/platform/base_platform_info.h" #include "styles/style_settings.h" -#include "styles/style_boxes.h" #include "styles/style_info.h" #include "styles/style_menu_icons.h" @@ -611,26 +601,20 @@ void SetupInterfaceScale( } } -void OpenFaq() { - File::OpenUrl(telegramFaqLink()); -} - -void SetupFaq(not_null container, bool icon) { - AddButtonWithIcon( - container, - tr::lng_settings_faq(), - icon ? st::settingsButton : st::settingsButtonNoIcon, - { icon ? &st::menuIconFaq : nullptr } - )->addClickHandler(OpenFaq); -} - void SetupHelp( not_null controller, not_null container) { Ui::AddDivider(container); Ui::AddSkip(container); - SetupFaq(container); + AddButtonWithIcon( + container, + tr::lng_settings_faq(), + st::settingsButton, + { &st::menuIconFaq } + )->addClickHandler([=] { + controller->session().data().faq().open(controller->uiShow()); + }); AddButtonWithIcon( container, @@ -674,7 +658,10 @@ void SetupHelp( auto box = Ui::MakeConfirmBox({ .text = tr::lng_settings_ask_sure(), .confirmed = sure, - .cancelled = OpenFaq, + .cancelled = [=](Fn close) { + controller->session().data().faq().open(controller->uiShow()); + close(); + }, .confirmText = tr::lng_settings_ask_ok(), .cancelText = tr::lng_settings_faq_button(), .strictCancel = true, diff --git a/Telegram/SourceFiles/settings/settings_main.h b/Telegram/SourceFiles/settings/settings_main.h index 7040fb9fa..303c58c5d 100644 --- a/Telegram/SourceFiles/settings/settings_main.h +++ b/Telegram/SourceFiles/settings/settings_main.h @@ -28,9 +28,6 @@ void SetupInterfaceScale( not_null window, not_null container, bool icon = true); -void SetupFaq( - not_null container, - bool icon = true); class Main : public Section
{ public: