aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--td/generate/scheme/td_api.tl3
-rw-r--r--td/telegram/LinkManager.cpp20
-rw-r--r--td/telegram/LinkManager.h1
-rw-r--r--test/link.cpp7
4 files changed, 27 insertions, 4 deletions
diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl
index edfd159dc..c6c8c5838 100644
--- a/td/generate/scheme/td_api.tl
+++ b/td/generate/scheme/td_api.tl
@@ -8542,6 +8542,9 @@ internalLinkTypeChatFolderInvite invite_link:string = InternalLinkType;
//@invite_link Internal representation of the invite link
internalLinkTypeChatInvite invite_link:string = InternalLinkType;
+//@description The link is a link that allows to select some chats
+internalLinkTypeChatSelection = InternalLinkType;
+
//@description The link is a link to the Contacts tab or page @section Section of the page if any; may be one of
//-"search", "sort", "new", "invite", "manage"
internalLinkTypeContacts section:string = InternalLinkType;
diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp
index 52077492b..40580a914 100644
--- a/td/telegram/LinkManager.cpp
+++ b/td/telegram/LinkManager.cpp
@@ -779,6 +779,12 @@ class LinkManager::InternalLinkDialogReferralProgram final : public InternalLink
}
};
+class LinkManager::InternalLinkDialogSelection final : public InternalLink {
+ td_api::object_ptr<td_api::InternalLinkType> get_internal_link_type_object() const final {
+ return td_api::make_object<td_api::internalLinkTypeChatSelection>();
+ }
+};
+
class LinkManager::InternalLinkGame final : public InternalLink {
string bot_username_;
string game_short_name_;
@@ -2135,8 +2141,11 @@ unique_ptr<LinkManager::InternalLink> LinkManager::parse_tg_link_query(Slice que
return td::make_unique<InternalLinkContacts>(path[1]);
}
return td::make_unique<InternalLinkContacts>(string());
- } else if (path.size() >= 2 && path[0] == "chat" && path[1] == "search") {
- // chat/search
+ } else if (path.size() == 2 && path[0] == "chats" && path[1] == "edit") {
+ // chats/edit
+ return td::make_unique<InternalLinkDialogSelection>();
+ } else if (path.size() == 2 && path[0] == "chats" && path[1] == "search") {
+ // chats/search
return td::make_unique<InternalLinkSearch>();
} else if (path.size() == 1 && path[0] == "login") {
// login?code=123456
@@ -3047,6 +3056,11 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp
}
return get_dialog_invite_link(invite_hash, is_internal);
}
+ case td_api::internalLinkTypeChatSelection::ID:
+ if (!is_internal) {
+ return Status::Error("HTTP link is unavailable for the link type");
+ }
+ return "tg://chats/edit";
case td_api::internalLinkTypeContacts::ID: {
auto link = static_cast<const td_api::internalLinkTypeContacts *>(type_ptr);
if (!is_internal) {
@@ -3384,7 +3398,7 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp
if (!is_internal) {
return Status::Error("HTTP link is unavailable for the link type");
}
- return "tg://chat/search";
+ return "tg://chats/search";
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 0d0c32101..9c6645512 100644
--- a/td/telegram/LinkManager.h
+++ b/td/telegram/LinkManager.h
@@ -142,6 +142,7 @@ class LinkManager final : public Actor {
class InternalLinkDialogFolderInvite;
class InternalLinkDialogInvite;
class InternalLinkDialogReferralProgram;
+ class InternalLinkDialogSelection;
class InternalLinkGame;
class InternalLinkGiftAuction;
class InternalLinkGroupCall;
diff --git a/test/link.cpp b/test/link.cpp
index 7e2e8048a..f4420c3ee 100644
--- a/test/link.cpp
+++ b/test/link.cpp
@@ -345,6 +345,10 @@ static auto chat_invite(const td::string &hash) {
return td::td_api::make_object<td::td_api::internalLinkTypeChatInvite>("tg:join?invite=" + hash);
}
+static auto chat_selection() {
+ return td::td_api::make_object<td::td_api::internalLinkTypeChatSelection>();
+}
+
static auto contacts(const td::string &section) {
return td::td_api::make_object<td::td_api::internalLinkTypeContacts>(section);
}
@@ -996,7 +1000,8 @@ TEST(Link, parse_internal_link_part2) {
parse_internal_link("tg://settings/my-profile/posts/add-album", my_profile("posts/add-album"));
parse_internal_link("tg://settings/my-profile/archived-posts", my_profile("archived-posts"));
- parse_internal_link("tg://chat/search/", search());
+ parse_internal_link("tg://chats/search/", search());
+ parse_internal_link("tg://chats/edit", chat_selection());
parse_internal_link("tg://contacts", contacts(""));
parse_internal_link("tg://contacts/asdasd", contacts(""));