diff options
| author | levlam <levlam@telegram.org> | 2026-01-13 16:05:50 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-01-13 16:05:50 +0300 |
| commit | 8e8b880416bf606af679a97d9d36fcbcacfc337d (patch) | |
| tree | a945b0ce0ad6752aaecf51f57afd29c28ea31a7c | |
| parent | a0200e2b738bc05f9d0f939f883484e7ff63add8 (diff) | |
Add td_api::internalLinkTypeSavedMessages.
| -rw-r--r-- | td/generate/scheme/td_api.tl | 3 | ||||
| -rw-r--r-- | td/telegram/LinkManager.cpp | 14 | ||||
| -rw-r--r-- | td/telegram/LinkManager.h | 1 | ||||
| -rw-r--r-- | test/link.cpp | 12 |
4 files changed, 30 insertions, 0 deletions
diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 78caeaf51..0271b851a 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -8609,6 +8609,9 @@ internalLinkTypeQrCodeAuthentication = InternalLinkType; //@description The link forces restore of App Store purchases when opened. For official iOS application only internalLinkTypeRestorePurchases = InternalLinkType; +//@description The link is a link to the Saved Messages chat. Call createPrivateChat with getOption("my_id") and open the chat +internalLinkTypeSavedMessages = InternalLinkType; + //@description The link is a link to application settings @section Section of the application settings to open; may be null if none internalLinkTypeSettings section:SettingsSection = InternalLinkType; diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp index 61fa5a814..e6b2bb99c 100644 --- a/td/telegram/LinkManager.cpp +++ b/td/telegram/LinkManager.cpp @@ -1001,6 +1001,12 @@ class LinkManager::InternalLinkRestorePurchases final : public InternalLink { } }; +class LinkManager::InternalLinkSavedMessages final : public InternalLink { + td_api::object_ptr<td_api::InternalLinkType> get_internal_link_type_object() const final { + return td_api::make_object<td_api::internalLinkTypeSavedMessages>(); + } +}; + class LinkManager::InternalLinkSettings final : public InternalLink { vector<string> path_; @@ -2049,6 +2055,9 @@ unique_ptr<LinkManager::InternalLink> LinkManager::parse_tg_link_query(Slice que if (is_valid_premium_referrer(referrer)) { return td::make_unique<InternalLinkPremiumGift>(std::move(referrer)); } + } else if (path.size() == 2 && path[0] == "settings" && path[1] == "saved-messages") { + // settings/saved-messages + return td::make_unique<InternalLinkSavedMessages>(); } else if (!path.empty() && path[0] == "settings") { // settings[/section[/subsection]] return td::make_unique<InternalLinkSettings>(vector<string>{path.begin() + 1, path.end()}); @@ -3149,6 +3158,11 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp return Status::Error("HTTP link is unavailable for the link type"); } return "tg://restore_purchases"; + case td_api::internalLinkTypeSavedMessages::ID: + if (!is_internal) { + return Status::Error("HTTP link is unavailable for the link type"); + } + return "tg://settings/saved-messages"; case td_api::internalLinkTypeSettings::ID: { auto link = static_cast<const td_api::internalLinkTypeSettings *>(type_ptr); if (!is_internal) { diff --git a/td/telegram/LinkManager.h b/td/telegram/LinkManager.h index 51412473c..ad79a7082 100644 --- a/td/telegram/LinkManager.h +++ b/td/telegram/LinkManager.h @@ -159,6 +159,7 @@ class LinkManager final : public Actor { class InternalLinkPublicDialog; class InternalLinkQrCodeAuthentication; class InternalLinkRestorePurchases; + class InternalLinkSavedMessages; class InternalLinkSettings; class InternalLinkStickerSet; class InternalLinkStarGiftCollection; diff --git a/test/link.cpp b/test/link.cpp index 71c8172f0..bdd310aa9 100644 --- a/test/link.cpp +++ b/test/link.cpp @@ -439,6 +439,10 @@ static auto restore_purchases() { return td::td_api::make_object<td::td_api::internalLinkTypeRestorePurchases>(); } +static auto saved_messages() { + return td::td_api::make_object<td::td_api::internalLinkTypeSavedMessages>(); +} + static auto sticker_set(const td::string &sticker_set_name, bool expect_custom_emoji) { return td::td_api::make_object<td::td_api::internalLinkTypeStickerSet>(sticker_set_name, expect_custom_emoji); } @@ -939,6 +943,14 @@ TEST(Link, parse_internal_link_part2) { parse_internal_link("tg:restore_purchasess", unknown_deep_link("tg://restore_purchasess")); parse_internal_link("tg:restore_purchases/test?#", unknown_deep_link("tg://restore_purchases/test?")); + parse_internal_link("tg:settings/saved-messages?token=abacaba", saved_messages()); + parse_internal_link("tg:settings/saved-messages?#", saved_messages()); + parse_internal_link("tg:settings/saved-messages/?#", saved_messages()); + parse_internal_link("tg:settings/saved-messages", saved_messages()); + parse_internal_link("tg:settings/saved-message", settings()); + parse_internal_link("tg:settings/saved-messagess", settings()); + parse_internal_link("tg:settings/saved-messages/test?#", settings()); + parse_internal_link("t.me/joinchat?invite=abcdef", nullptr); parse_internal_link("t.me/joinchat", nullptr); parse_internal_link("t.me/joinchat/", nullptr); |
