From 1b3cf0a654aae7c97d23379fa8ea7b949cfde2e3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Mar 2023 17:37:17 +0400 Subject: [PATCH] Add an "Open App" button for bot app link previews. --- Telegram/Resources/langs/lang.strings | 1 + Telegram/SourceFiles/data/data_web_page.cpp | 12 +++++++----- Telegram/SourceFiles/data/data_web_page.h | 1 + .../history/view/history_view_view_button.cpp | 18 +++++++++++++++--- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index b76a04c58..4465a9dae 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -3543,6 +3543,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_view_button_bot" = "View bot"; "lng_view_button_group" = "View group"; "lng_view_button_channel" = "View channel"; +"lng_view_button_bot_app" = "Open app"; "lng_view_button_background" = "View background"; "lng_view_button_theme" = "View theme"; "lng_view_button_message" = "View message"; diff --git a/Telegram/SourceFiles/data/data_web_page.cpp b/Telegram/SourceFiles/data/data_web_page.cpp index aac8e8ae6..57b31d0f6 100644 --- a/Telegram/SourceFiles/data/data_web_page.cpp +++ b/Telegram/SourceFiles/data/data_web_page.cpp @@ -162,16 +162,18 @@ WebPageType ParseWebPageType( } else if (type == u"telegram_megagroup_request"_q || type == u"telegram_chat_request"_q) { return WebPageType::GroupWithRequest; - } else if (type == u"telegram_message"_q) { + } else if (type == u"telegram_message"_q) { return WebPageType::Message; - } else if (type == u"telegram_bot"_q) { + } else if (type == u"telegram_bot"_q) { return WebPageType::Bot; - } else if (type == u"telegram_voicechat"_q) { + } else if (type == u"telegram_voicechat"_q) { return WebPageType::VoiceChat; - } else if (type == u"telegram_livestream"_q) { + } else if (type == u"telegram_livestream"_q) { return WebPageType::Livestream; - } else if (type == u"telegram_user"_q) { + } else if (type == u"telegram_user"_q) { return WebPageType::User; + } else if (type == u"telegram_botapp"_q) { + return WebPageType::BotApp; } else if (hasIV) { return WebPageType::ArticleWithIV; } else { diff --git a/Telegram/SourceFiles/data/data_web_page.h b/Telegram/SourceFiles/data/data_web_page.h index 2655fd7c4..8481a7b3b 100644 --- a/Telegram/SourceFiles/data/data_web_page.h +++ b/Telegram/SourceFiles/data/data_web_page.h @@ -31,6 +31,7 @@ enum class WebPageType { User, Bot, Profile, + BotApp, WallPaper, Theme, diff --git a/Telegram/SourceFiles/history/view/history_view_view_button.cpp b/Telegram/SourceFiles/history/view/history_view_view_button.cpp index 0d6f90c47..1a2db4d6b 100644 --- a/Telegram/SourceFiles/history/view/history_view_view_button.cpp +++ b/Telegram/SourceFiles/history/view/history_view_view_button.cpp @@ -71,18 +71,29 @@ inline auto WebPageToPhrase(not_null webpage) { ? tr::lng_view_button_bot(tr::now) : (type == WebPageType::User) ? tr::lng_view_button_user(tr::now) + : (type == WebPageType::BotApp) + ? tr::lng_view_button_bot_app(tr::now) : QString()); } -[[nodiscard]] ClickHandlerPtr MakeWebPageClickHandler( +[[nodiscard]] ClickHandlerPtr MakeWebPageButtonClickHandler( not_null media) { Expects(media->webpage() != nullptr); const auto url = media->webpage()->url; + const auto type = media->webpage()->type; return std::make_shared([=](ClickContext context) { const auto my = context.other.value(); if (const auto controller = my.sessionWindow.get()) { - HiddenUrlClickHandler::Open(url, context.other); + if (type == WebPageType::BotApp) { + // Bot Web Apps always show confirmation on hidden urls. + // + // But from the dedicated "Open App" button we don't want + // to request users confirmation on non-first app opening. + UrlClickHandler::Open(url, context.other); + } else { + HiddenUrlClickHandler::Open(url, context.other); + } } }); } @@ -124,6 +135,7 @@ bool ViewButton::MediaHasViewButton( || (type == WebPageType::User) || (type == WebPageType::VoiceChat) || (type == WebPageType::Livestream) + || (type == WebPageType::BotApp) || ((type == WebPageType::Theme) && webpage->document && webpage->document->isTheme()) @@ -160,7 +172,7 @@ ViewButton::Inner::Inner( not_null media, Fn updateCallback) : margins(st::historyViewButtonMargins) -, link(MakeWebPageClickHandler(media)) +, link(MakeWebPageButtonClickHandler(media)) , updateCallback(std::move(updateCallback)) , belowInfo(false) , text(st::historyViewButtonTextStyle, WebPageToPhrase(media->webpage())) {