aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-01-08 21:01:16 +0300
committerlevlam <levlam@telegram.org>2026-01-08 21:01:16 +0300
commitffd257f25322e41a50e6a15872deba2c94a4f73d (patch)
tree82767c825ac3ff86fabcb9c14c19f9ba29184433
parent57e95d0eceb5855452c82a0f5fac991eb2adcd53 (diff)
Add td_api::settingsSectionQrCode.
-rw-r--r--td/generate/scheme/td_api.tl4
-rw-r--r--td/telegram/LinkManager.cpp18
-rw-r--r--test/link.cpp9
3 files changed, 31 insertions, 0 deletions
diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl
index 5a138aaef..0f96e8857 100644
--- a/td/generate/scheme/td_api.tl
+++ b/td/generate/scheme/td_api.tl
@@ -8393,6 +8393,10 @@ settingsSectionPrivacyAndSecurity subsection:string = SettingsSection;
//@description The "Privacy Policy" section
settingsSectionPrivacyPolicy = SettingsSection;
+//@description The current user's QR code section @subsection Subsection of the section if any; may be one of
+//-"share", "scan"
+settingsSectionQrCode subsection:string = SettingsSection;
+
//@description Search in Settings
settingsSectionSearch = SettingsSection;
diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp
index 1d96d7789..fe3bf8010 100644
--- a/td/telegram/LinkManager.cpp
+++ b/td/telegram/LinkManager.cpp
@@ -303,6 +303,11 @@ static const vector<string> &get_privacy_settings_subsections() {
return subsections;
}
+static const vector<string> &get_qr_code_settings_subsections() {
+ static const vector<string> subsections{"share", "scan"};
+ return subsections;
+}
+
static string get_url_query_hash(bool is_tg, const HttpUrlQuery &url_query) {
const auto &path = url_query.path_;
if (is_tg) {
@@ -1099,6 +1104,12 @@ class LinkManager::InternalLinkSettings final : public InternalLink {
if (path_[0] == "privacy-policy") {
return td_api::make_object<td_api::settingsSectionPrivacyPolicy>();
}
+ if (path_[0] == "qr-code") {
+ if (td::contains(get_qr_code_settings_subsections(), subsection)) {
+ return td_api::make_object<td_api::settingsSectionQrCode>(subsection);
+ }
+ return td_api::make_object<td_api::settingsSectionQrCode>();
+ }
if (path_[0] == "search") {
return td_api::make_object<td_api::settingsSectionSearch>();
}
@@ -3211,6 +3222,13 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp
}
case td_api::settingsSectionPrivacyPolicy::ID:
return "tg://settings/privacy-policy";
+ case td_api::settingsSectionQrCode::ID: {
+ const auto &subsection = static_cast<const td_api::settingsSectionQrCode *>(section_ptr)->subsection_;
+ if (td::contains(get_qr_code_settings_subsections(), subsection)) {
+ return PSTRING() << "tg://settings/qr-code/" << subsection;
+ }
+ return "tg://settings/qr-code";
+ }
case td_api::settingsSectionSearch::ID:
return "tg://settings/search";
default:
diff --git a/test/link.cpp b/test/link.cpp
index b28a8085d..7affee266 100644
--- a/test/link.cpp
+++ b/test/link.cpp
@@ -243,6 +243,10 @@ static auto privacy_policy() {
return settings(td::td_api::make_object<td::td_api::settingsSectionPrivacyPolicy>());
}
+static auto qr_code(td::string subsection = td::string()) {
+ return settings(td::td_api::make_object<td::td_api::settingsSectionQrCode>(subsection));
+}
+
static auto search() {
return settings(td::td_api::make_object<td::td_api::settingsSectionSearch>());
}
@@ -1833,6 +1837,11 @@ TEST(Link, parse_internal_link_part4) {
parse_internal_link("tg://settings/chat/browser/history", in_app_browser("history"));
parse_internal_link("tg://settings/chat/browser/search", in_app_browser("search"));
+ parse_internal_link("tg://settings/qr-code", qr_code());
+ parse_internal_link("tg://settings/qr-code/share", qr_code("share"));
+ parse_internal_link("tg://settings/qr-code/share/", qr_code("share"));
+ parse_internal_link("tg://settings/qr-code/share/a", qr_code());
+
parse_internal_link("tg://stars_topup", unknown_deep_link("tg://stars_topup"));
parse_internal_link("tg://stars_topup?balance=", unknown_deep_link("tg://stars_topup?balance="));
parse_internal_link("tg://stars_topup?balance=test", buy_stars(1, ""));