From a77707d8d580dacc57ff6f88fc05faa5bbcd8e6d Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 28 May 2021 20:36:05 +0300 Subject: [PATCH] Support t.me/s/ links. --- td/telegram/LinkManager.cpp | 17 +++++++++++++++-- test/link.cpp | 5 +++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp index bc9bae020..e8cdd0955 100644 --- a/td/telegram/LinkManager.cpp +++ b/td/telegram/LinkManager.cpp @@ -157,7 +157,7 @@ class LinkManager::InternalLinkTheme : public InternalLink { string theme_name_; td_api::object_ptr get_internal_link_type_object() const final { - return td_api::make_object(theme_name_); + return td_api::make_object(theme_name_); } InternalLinkType get_type() const final { @@ -426,7 +426,20 @@ LinkManager::LinkInfo LinkManager::get_link_info(Slice link) { if (host == t_me_url) { result.is_internal_ = true; result.is_tg_ = false; - result.query_ = std::move(http_url.query_); + + Slice query = http_url.query_; + while (true) { + if (begins_with(query, "/s/")) { + query.remove_prefix(2); + continue; + } + if (begins_with(query, "/%73/")) { + query.remove_prefix(4); + continue; + } + break; + } + result.query_ = query.str(); return result; } } diff --git a/test/link.cpp b/test/link.cpp index 3d4d4eeda..62ab77720 100644 --- a/test/link.cpp +++ b/test/link.cpp @@ -50,14 +50,13 @@ TEST(Link, check_link) { } static void parse_internal_link(td::string url, td::td_api::object_ptr expected) { - // LOG(ERROR) << url; auto result = td::LinkManager::parse_internal_link(url); if (result != nullptr) { auto object = result->get_internal_link_type_object(); if (object->get_id() == td::td_api::internalLinkTypeMessageDraft::ID) { static_cast(object.get())->text_->entities_.clear(); } - ASSERT_STREQ(to_string(expected), to_string(object)); + ASSERT_STREQ(url + to_string(expected), url + to_string(object)); } else { ASSERT_TRUE(expected == nullptr); } @@ -107,6 +106,8 @@ TEST(Link, parse_internal_link) { parse_internal_link("www%2etelegram.me/levlam/1", message()); parse_internal_link("www%2Etelegram.dog/levlam/1", message()); parse_internal_link("www%252Etelegram.dog/levlam/1", nullptr); + parse_internal_link("www.t.me/s/s/s/s/s/joinchat/1", chat_invite()); + parse_internal_link("http://t.me/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/joinchat/1", chat_invite()); parse_internal_link("http://t.me/levlam/1", message()); parse_internal_link("https://t.me/levlam/1", message()); parse_internal_link("hTtp://www.t.me:443/levlam/1", message());