aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--td/generate/scheme/td_api.tl3
-rw-r--r--td/telegram/LinkManager.cpp14
-rw-r--r--td/telegram/LinkManager.h1
-rw-r--r--test/link.cpp12
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);