diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index 63603f6d2..b01d980d9 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -382,7 +382,8 @@ void GiftsBox( not_null box, not_null controller, std::vector> users, - not_null api) { + not_null api, + const QString &ref) { Expects(!users.empty()); const auto boxWidth = st::boxWideWidth; @@ -591,7 +592,7 @@ void GiftsBox( Settings::AddSummaryPremium( content, controller, - u"gift"_q, + ref, std::move(buttonCallback)); } @@ -614,7 +615,7 @@ void GiftsBox( auto raw = Settings::CreateSubscribeButton({ controller, box, - [] { return u"gift"_q; }, + [=] { return ref; }, rpl::combine( state->buttonText.events(), state->confirmButtonBusy.value(), @@ -876,7 +877,7 @@ void GiftPremiumValidator::cancel() { _requestId = 0; } -void GiftPremiumValidator::showChoosePeerBox() { +void GiftPremiumValidator::showChoosePeerBox(const QString &ref) { if (_manyGiftsLifetime) { return; } @@ -936,7 +937,7 @@ void GiftPremiumValidator::showChoosePeerBox() { }) | ranges::to>>(); if (!users.empty()) { const auto giftBox = show->show( - Box(GiftsBox, _controller, users, api)); + Box(GiftsBox, _controller, users, api, ref)); giftBox->boxClosing( ) | rpl::start_with_next([=] { _manyGiftsLifetime.destroy(); diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.h b/Telegram/SourceFiles/boxes/gift_premium_box.h index 5a0bfb659..ed001200e 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.h +++ b/Telegram/SourceFiles/boxes/gift_premium_box.h @@ -34,7 +34,7 @@ public: GiftPremiumValidator(not_null controller); void showBox(not_null user); - void showChoosePeerBox(); + void showChoosePeerBox(const QString &ref); void cancel(); private: diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 9bfcedd3d..68844669d 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -845,6 +845,21 @@ bool ResolvePremiumOffer( return true; } +bool ResolvePremiumMultigift( + Window::SessionController *controller, + const Match &match, + const QVariant &context) { + if (!controller) { + return false; + } + const auto params = url_parse_params( + match->captured(1).mid(1), + qthelp::UrlParamNameTransform::ToLower); + controller->showGiftPremiumsBox(params.value(u"ref"_q, u"gift_url"_q)); + controller->window().activate(); + return true; +} + bool ResolveLoginCode( Window::SessionController *controller, const Match &match, @@ -968,6 +983,10 @@ const std::vector &LocalUrlHandlers() { u"premium_offer/?(\\?.+)?(#|$)"_q, ResolvePremiumOffer, }, + { + u"^premium_multigift/?\\?(.+)(#|$)"_q, + ResolvePremiumMultigift, + }, { u"^login/?(\\?code=([0-9]+))(&|$)"_q, ResolveLoginCode diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index b6aa84b19..d6f512008 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -427,7 +427,7 @@ void SetupPremium( { .icon = &st::menuIconGiftPremium } ); button->addClickHandler([=] { - controller->showGiftPremiumsBox(); + controller->showGiftPremiumsBox(u"gift"_q); }); constexpr auto kNewExpiresAt = int(1735689600); if (base::unixtime::now() < kNewExpiresAt) { diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 3a348ade3..454e525f6 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1218,8 +1218,8 @@ void SessionController::showGiftPremiumBox(UserData *user) { } } -void SessionController::showGiftPremiumsBox() { - _giftPremiumValidator.showChoosePeerBox(); +void SessionController::showGiftPremiumsBox(const QString &ref) { + _giftPremiumValidator.showChoosePeerBox(ref); } void SessionController::init() { diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 885eb812e..ac23dfae4 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -380,7 +380,7 @@ public: void showEditPeerBox(PeerData *peer); void showGiftPremiumBox(UserData *user); - void showGiftPremiumsBox(); + void showGiftPremiumsBox(const QString &ref); void enableGifPauseReason(GifPauseReason reason); void disableGifPauseReason(GifPauseReason reason);