From 4a452659266d995558ac838fbf3893f7965fc8aa Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 26 Dec 2023 21:01:33 +0300 Subject: [PATCH] Add td_api::internalLinkTypePremiumGift. --- td/generate/scheme/td_api.tl | 3 +++ td/telegram/LinkManager.cpp | 22 ++++++++++++++++++++++ td/telegram/LinkManager.h | 1 + test/link.cpp | 8 ++++++++ 4 files changed, 34 insertions(+) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 1b1c594e7..44328a610 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -5569,6 +5569,9 @@ internalLinkTypePhoneNumberConfirmation hash:string phone_number:string = Intern //@description The link is a link to the Premium features screen of the application from which the user can subscribe to Telegram Premium. Call getPremiumFeatures with the given referrer to process the link @referrer Referrer specified in the link internalLinkTypePremiumFeatures referrer:string = InternalLinkType; +//@description The link is a link to the screen for gifting Telegram Premium subscriptions to friends @referrer Referrer specified in the link +internalLinkTypePremiumGift referrer:string = InternalLinkType; + //@description The link is a link with a Telegram Premium gift code. Call checkPremiumGiftCode with the given code to process the link. If the code is valid and the user wants to apply it, then call applyPremiumGiftCode //@code The Telegram Premium gift code internalLinkTypePremiumGiftCode code:string = InternalLinkType; diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp index b4539d132..3354c9bd7 100644 --- a/td/telegram/LinkManager.cpp +++ b/td/telegram/LinkManager.cpp @@ -561,6 +561,18 @@ class LinkManager::InternalLinkPremiumFeatures final : public InternalLink { } }; +class LinkManager::InternalLinkPremiumGift final : public InternalLink { + string referrer_; + + td_api::object_ptr get_internal_link_type_object() const final { + return td_api::make_object(referrer_); + } + + public: + explicit InternalLinkPremiumGift(string referrer) : referrer_(std::move(referrer)) { + } +}; + class LinkManager::InternalLinkPremiumGiftCode final : public InternalLink { string code_; @@ -1344,6 +1356,9 @@ unique_ptr LinkManager::parse_tg_link_query(Slice que } else if (path.size() == 1 && path[0] == "premium_offer") { // premium_offer?ref= return td::make_unique(get_arg("ref")); + } else if (path.size() == 1 && path[0] == "premium_multigift") { + // premium_multigift?ref= + return td::make_unique(get_arg("ref")); } else if (!path.empty() && path[0] == "settings") { if (path.size() == 2 && path[1] == "auto_delete") { // settings/auto_delete @@ -2180,6 +2195,13 @@ Result LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp } return PSTRING() << "tg://premium_offer?ref=" << url_encode(link->referrer_); } + case td_api::internalLinkTypePremiumGift::ID: { + auto link = static_cast(type_ptr); + if (!is_internal) { + return Status::Error("HTTP link is unavailable for the link type"); + } + return PSTRING() << "tg://premium_multigift?ref=" << url_encode(link->referrer_); + } case td_api::internalLinkTypePremiumGiftCode::ID: { auto link = static_cast(type_ptr); if (is_internal) { diff --git a/td/telegram/LinkManager.h b/td/telegram/LinkManager.h index 303231102..1a43fc6dd 100644 --- a/td/telegram/LinkManager.h +++ b/td/telegram/LinkManager.h @@ -141,6 +141,7 @@ class LinkManager final : public Actor { class InternalLinkMessageDraft; class InternalLinkPassportDataRequest; class InternalLinkPremiumFeatures; + class InternalLinkPremiumGift; class InternalLinkPremiumGiftCode; class InternalLinkPrivacyAndSecuritySettings; class InternalLinkProxy; diff --git a/test/link.cpp b/test/link.cpp index 1bd138bb0..d25192fe7 100644 --- a/test/link.cpp +++ b/test/link.cpp @@ -291,6 +291,10 @@ static auto premium_features(const td::string &referrer) { return td::td_api::make_object(referrer); } +static auto premium_gift(const td::string &referrer) { + return td::td_api::make_object(referrer); +} + static auto premium_gift_code(const td::string &code) { return td::td_api::make_object(code); } @@ -1237,6 +1241,10 @@ TEST(Link, parse_internal_link_part4) { parse_internal_link("tg:premium_offer?ref=abc%30ef", premium_features("abc0ef")); parse_internal_link("tg://premium_offer?ref=", premium_features("")); + parse_internal_link("tg:premium_multigift?ref=abcdef", premium_gift("abcdef")); + parse_internal_link("tg:premium_multigift?ref=abc%30ef", premium_gift("abc0ef")); + parse_internal_link("tg://premium_multigift?ref=", premium_gift("")); + parse_internal_link("tg://settings", settings()); parse_internal_link("tg://setting", unknown_deep_link("tg://setting")); parse_internal_link("tg://settings?asdsa?D?SADasD?asD", settings());