Add internalLinkTypeWebApp.is_compact.
This commit is contained in:
parent
9297ae4098
commit
aa26c117ee
@ -6414,7 +6414,8 @@ internalLinkTypeVideoChat chat_username:string invite_hash:string is_live_stream
|
||||
//@bot_username Username of the bot that owns the Web App
|
||||
//@web_app_short_name Short name of the Web App
|
||||
//@start_parameter Start parameter to be passed to getWebAppLinkUrl
|
||||
internalLinkTypeWebApp bot_username:string web_app_short_name:string start_parameter:string = InternalLinkType;
|
||||
//@is_compact True, if the Web App must be tried to open in a compact mode with getWebAppLinkUrl
|
||||
internalLinkTypeWebApp bot_username:string web_app_short_name:string start_parameter:string is_compact:Bool = InternalLinkType;
|
||||
|
||||
|
||||
//@description Contains an HTTPS link to a message in a supergroup or channel, or a forum topic @link The link @is_public True, if the link will work for non-members of the chat
|
||||
|
@ -811,16 +811,19 @@ class LinkManager::InternalLinkWebApp final : public InternalLink {
|
||||
string bot_username_;
|
||||
string web_app_short_name_;
|
||||
string start_parameter_;
|
||||
string mode_;
|
||||
|
||||
td_api::object_ptr<td_api::InternalLinkType> get_internal_link_type_object() const final {
|
||||
return td_api::make_object<td_api::internalLinkTypeWebApp>(bot_username_, web_app_short_name_, start_parameter_);
|
||||
return td_api::make_object<td_api::internalLinkTypeWebApp>(bot_username_, web_app_short_name_, start_parameter_,
|
||||
mode_ == "compact");
|
||||
}
|
||||
|
||||
public:
|
||||
InternalLinkWebApp(string bot_username, string web_app_short_name, string start_parameter)
|
||||
InternalLinkWebApp(string bot_username, string web_app_short_name, string start_parameter, string mode)
|
||||
: bot_username_(std::move(bot_username))
|
||||
, web_app_short_name_(std::move(web_app_short_name))
|
||||
, start_parameter_(std::move(start_parameter)) {
|
||||
, start_parameter_(std::move(start_parameter))
|
||||
, mode_(std::move(mode)) {
|
||||
}
|
||||
};
|
||||
|
||||
@ -1312,9 +1315,9 @@ unique_ptr<LinkManager::InternalLink> LinkManager::parse_tg_link_query(Slice que
|
||||
}
|
||||
if (arg.first == "appname" && is_valid_web_app_name(arg.second)) {
|
||||
// resolve?domain=<bot_username>&appname=<app_name>
|
||||
// resolve?domain=<bot_username>&appname=<app_name>&startapp=<start_parameter>
|
||||
return td::make_unique<InternalLinkWebApp>(std::move(username), arg.second,
|
||||
url_query.get_arg("startapp").str());
|
||||
// resolve?domain=<bot_username>&appname=<app_name>&startapp=<start_parameter>&mode=compact
|
||||
return td::make_unique<InternalLinkWebApp>(
|
||||
std::move(username), arg.second, url_query.get_arg("startapp").str(), url_query.get_arg("mode").str());
|
||||
}
|
||||
if (arg.first == "story" && is_valid_story_id(arg.second)) {
|
||||
// resolve?domain=<username>&story=<story_id>
|
||||
@ -1738,8 +1741,9 @@ unique_ptr<LinkManager::InternalLink> LinkManager::parse_t_me_link_query(Slice q
|
||||
}
|
||||
if (path.size() == 2 && is_valid_web_app_name(path[1])) {
|
||||
// /<username>/<web_app_name>
|
||||
// /<username>/<web_app_name>?startapp=<start_parameter>
|
||||
return td::make_unique<InternalLinkWebApp>(std::move(username), path[1], url_query.get_arg("startapp").str());
|
||||
// /<username>/<web_app_name>?startapp=<start_parameter>&mode=compact
|
||||
return td::make_unique<InternalLinkWebApp>(std::move(username), path[1], url_query.get_arg("startapp").str(),
|
||||
url_query.get_arg("mode").str());
|
||||
}
|
||||
for (auto &arg : url_query.args_) {
|
||||
if (arg.first == "voicechat" || arg.first == "videochat" || arg.first == "livestream") {
|
||||
@ -2441,16 +2445,18 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp
|
||||
if (!is_valid_start_parameter(link->start_parameter_)) {
|
||||
return Status::Error(400, "Invalid start parameter specified");
|
||||
}
|
||||
string start_parameter;
|
||||
string parameters;
|
||||
if (!link->start_parameter_.empty()) {
|
||||
start_parameter = PSTRING() << (is_internal ? '&' : '?') << "startapp=" << link->start_parameter_;
|
||||
parameters = PSTRING() << (is_internal ? '&' : '?') << "startapp=" << link->start_parameter_
|
||||
<< (link->is_compact_ ? "&mode=compact" : "");
|
||||
} else if (link->is_compact_) {
|
||||
parameters = PSTRING() << (is_internal ? '&' : '?') << "mode=compact";
|
||||
}
|
||||
if (is_internal) {
|
||||
return PSTRING() << "tg://resolve?domain=" << link->bot_username_ << "&appname=" << link->web_app_short_name_
|
||||
<< start_parameter;
|
||||
<< parameters;
|
||||
} else {
|
||||
return PSTRING() << get_t_me_url() << link->bot_username_ << '/' << link->web_app_short_name_
|
||||
<< start_parameter;
|
||||
return PSTRING() << get_t_me_url() << link->bot_username_ << '/' << link->web_app_short_name_ << parameters;
|
||||
}
|
||||
}
|
||||
default:
|
||||
|
@ -376,8 +376,9 @@ static auto video_chat(const td::string &chat_username, const td::string &invite
|
||||
}
|
||||
|
||||
static auto web_app(const td::string &bot_username, const td::string &web_app_short_name,
|
||||
const td::string &start_parameter) {
|
||||
return td::td_api::make_object<td::td_api::internalLinkTypeWebApp>(bot_username, web_app_short_name, start_parameter);
|
||||
const td::string &start_parameter, bool is_compact) {
|
||||
return td::td_api::make_object<td::td_api::internalLinkTypeWebApp>(bot_username, web_app_short_name, start_parameter,
|
||||
is_compact);
|
||||
}
|
||||
|
||||
TEST(Link, parse_internal_link_part1) {
|
||||
@ -616,7 +617,7 @@ TEST(Link, parse_internal_link_part1) {
|
||||
parse_internal_link("t.me/bg/111111-222222%20?rotation=180%20", background("111111-222222%20?rotation=180%20"));
|
||||
parse_internal_link("t.me/bg/111111~222222", background("111111~222222"));
|
||||
parse_internal_link("t.me/bg/abacaba", background("abacaba"));
|
||||
parse_internal_link("t.me/Bg/abacaba", web_app("Bg", "abacaba", ""));
|
||||
parse_internal_link("t.me/Bg/abacaba", web_app("Bg", "abacaba", "", false));
|
||||
parse_internal_link("t.me/bg/111111~222222#asdasd", background("111111~222222"));
|
||||
parse_internal_link("t.me/bg/111111~222222?mode=blur", background("111111~222222"));
|
||||
parse_internal_link("t.me/bg/111111~222222?mode=blur&text=1", background("111111~222222"));
|
||||
@ -1182,7 +1183,7 @@ TEST(Link, parse_internal_link_part4) {
|
||||
parse_internal_link("https://telegram.dog/tele%63ram/s/%31%39", story("telecram", 19));
|
||||
|
||||
parse_internal_link("tg:resolve?domain=username&appname=aasdasd&startapp=123asd",
|
||||
web_app("username", "aasdasd", "123asd"));
|
||||
web_app("username", "aasdasd", "123asd", false));
|
||||
parse_internal_link("TG://resolve?domain=username&appname=&startapp=123asd", public_chat("username"));
|
||||
parse_internal_link("TG://test@resolve?domain=username&appname=asd", nullptr);
|
||||
parse_internal_link("tg:resolve:80?domain=username&appname=asd", nullptr);
|
||||
@ -1191,7 +1192,10 @@ TEST(Link, parse_internal_link_part4) {
|
||||
parse_internal_link("tg:resolve?domain=&appname=asd", unknown_deep_link("tg://resolve?domain=&appname=asd"));
|
||||
parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41&startapp=", public_chat("telegram"));
|
||||
parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41b&startapp=", public_chat("telegram"));
|
||||
parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41bc&startapp=", web_app("telegram", "Abc", ""));
|
||||
parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41bc&startapp=",
|
||||
web_app("telegram", "Abc", "", false));
|
||||
parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41bc&startapp=&mode=compact",
|
||||
web_app("telegram", "Abc", "", true));
|
||||
|
||||
parse_internal_link("t.me/username/0/a//s/as?appname=asd", public_chat("username"));
|
||||
parse_internal_link("t.me/username/aasdas/2?test=1&appname=asd#12312", public_chat("username"));
|
||||
@ -1203,12 +1207,14 @@ TEST(Link, parse_internal_link_part4) {
|
||||
parse_internal_link("t.me//username?appname=asd", nullptr);
|
||||
parse_internal_link("https://telegram.dog/tele%63ram?appname=t%63st", public_chat("telecram"));
|
||||
parse_internal_link("t.me/username/def/asd", public_chat("username"));
|
||||
parse_internal_link("t.me/username/asd#12312&startapp=qwe", web_app("username", "asd", ""));
|
||||
parse_internal_link("t.me/username/asd?12312&startapp=qwe", web_app("username", "asd", "qwe"));
|
||||
parse_internal_link("t.me/username/asdasd?startapp=0", web_app("username", "asdasd", "0"));
|
||||
parse_internal_link("t.me/username/asd", web_app("username", "asd", ""));
|
||||
parse_internal_link("t.me/username/asd#12312&startapp=qwe", web_app("username", "asd", "", false));
|
||||
parse_internal_link("t.me/username/asd?12312&startapp=qwe&mode=compac", web_app("username", "asd", "qwe", false));
|
||||
parse_internal_link("t.me/username/asd?12312&startapp=qwe&mode=compact", web_app("username", "asd", "qwe", true));
|
||||
parse_internal_link("t.me/username/asdasd?startapp=0", web_app("username", "asdasd", "0", false));
|
||||
parse_internal_link("t.me/username/asd", web_app("username", "asd", "", false));
|
||||
parse_internal_link("t.me/username/", public_chat("username"));
|
||||
parse_internal_link("https://telegram.dog/tele%63ram/t%63st", web_app("telecram", "tcst", ""));
|
||||
parse_internal_link("https://telegram.dog/tele%63ram/t%63st", web_app("telecram", "tcst", "", false));
|
||||
parse_internal_link("https://telegram.dog/tele%63ram/t%63st?mode=compact", web_app("telecram", "tcst", "", true));
|
||||
|
||||
parse_internal_link("tg:resolve?domain=username&startapp=aasdasd", side_menu_bot("username", "aasdasd"));
|
||||
parse_internal_link("TG://resolve?domain=username&startapp=&startapp=123asd", side_menu_bot("username", ""));
|
||||
|
Loading…
x
Reference in New Issue
Block a user