diff options
| -rw-r--r-- | td/generate/scheme/td_api.tl | 3 | ||||
| -rw-r--r-- | td/telegram/LinkManager.cpp | 20 | ||||
| -rw-r--r-- | td/telegram/LinkManager.h | 1 | ||||
| -rw-r--r-- | test/link.cpp | 7 |
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 §ion) { 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("")); |
