From d69905feae16ea280d53798a68edead2727e559f Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 14 Nov 2024 08:42:15 +0300 Subject: [PATCH] Added ability to subscribe again via slug from subscriptions list. --- Telegram/Resources/langs/lang.strings | 1 + .../payments/payments_non_panel_process.cpp | 16 ++++---- .../settings/settings_credits_graphics.cpp | 37 +++++++++++++++---- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 66fc25351..b29aa7693 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2523,6 +2523,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_credits_subscription_on_about" = "If you cancel now, you will still be able to access your subscription until {date}."; "lng_credits_subscription_off_button" = "Renew Subscription"; +"lng_credits_subscription_off_rejoin_button" = "Subscribe again"; "lng_credits_subscription_off_about" = "You have canceled your subscription."; "lng_credits_subscription_off_by_bot_about" = "{bot} has canceled your subscription."; diff --git a/Telegram/SourceFiles/payments/payments_non_panel_process.cpp b/Telegram/SourceFiles/payments/payments_non_panel_process.cpp index 6f348df4f..0b9e292fd 100644 --- a/Telegram/SourceFiles/payments/payments_non_panel_process.cpp +++ b/Telegram/SourceFiles/payments/payments_non_panel_process.cpp @@ -94,14 +94,14 @@ void ProcessCreditsPayment( Ui::SendCreditsBox, form, [=] { - *unsuccessful = false; - if (const auto widget = fireworks.data()) { - Ui::StartFireworks(widget); - } - if (const auto onstack = maybeReturnToBot) { - onstack(CheckoutResult::Paid); - } - })); + *unsuccessful = false; + if (const auto widget = fireworks.data()) { + Ui::StartFireworks(widget); + } + if (const auto onstack = maybeReturnToBot) { + onstack(CheckoutResult::Paid); + } + })); box->boxClosing() | rpl::start_with_next([=] { crl::on_main([=] { if (*unsuccessful) { diff --git a/Telegram/SourceFiles/settings/settings_credits_graphics.cpp b/Telegram/SourceFiles/settings/settings_credits_graphics.cpp index 0b701307b..4a190dc3a 100644 --- a/Telegram/SourceFiles/settings/settings_credits_graphics.cpp +++ b/Telegram/SourceFiles/settings/settings_credits_graphics.cpp @@ -47,6 +47,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "payments/payments_checkout_process.h" #include "payments/payments_form.h" +#include "payments/payments_non_panel_process.h" #include "settings/settings_common_session.h" #include "settings/settings_credits.h" #include "statistics/widgets/chart_header_widget.h" @@ -1376,15 +1377,23 @@ void ReceiptCreditsBox( AddMiniStars(content, widget, stUser, st::boxWideWidth, 2); } + const auto rejoinByApi = base::unixtime::serialize(s.until) + > base::unixtime::now(); + const auto rejoinByInvite = !s.inviteHash.isEmpty(); + const auto rejoinBySlug = !s.slug.isEmpty(); const auto toRenew = (s.cancelled || s.expired) - && (!s.inviteHash.isEmpty() - || (base::unixtime::serialize(s.until) > base::unixtime::now())) + && (rejoinByApi || rejoinByInvite) + && !s.cancelledByBot; + const auto toRejoin = (s.cancelled || s.expired) + && rejoinBySlug && !s.cancelledByBot; auto confirmText = rpl::conditional( state->confirmButtonBusy.value(), rpl::single(QString()), (toRenew ? tr::lng_credits_subscription_off_button() + : toRejoin + ? tr::lng_credits_subscription_off_rejoin_button() : (canConvert || couldConvert || nonConvertible) ? (e.savedToProfile ? tr::lng_gift_display_on_page_hide() @@ -1432,6 +1441,19 @@ void ReceiptCreditsBox( save, done); } + } else if (toRejoin) { + if (const auto window = weakWindow.get()) { + const auto finish = [=](Payments::CheckoutResult&&) { + ProcessReceivedSubscriptions(weak, session); + }; + Payments::CheckoutProcess::Start( + &window->session(), + s.slug, + [](auto) {}, + Payments::ProcessNonPanelPaymentFormFactory( + window, + finish)); + } } else if (toRenew && s.expired) { Api::CheckChatInvite(controller, s.inviteHash, nullptr, [=] { ProcessReceivedSubscriptions(weak, session); @@ -1450,7 +1472,10 @@ void ReceiptCreditsBox( } }; - if ((toRenew || canConvert || couldConvert || nonConvertible) && peer) { + const auto willBusy = toRejoin + || (peer + && (toRenew || canConvert || couldConvert || nonConvertible)); + if (willBusy) { const auto close = Ui::CreateChild( content, st::boxTitleClose); @@ -1465,11 +1490,7 @@ void ReceiptCreditsBox( || state->convertButtonBusy.current()) { return; } - if (peer - && (toRenew - || canConvert - || couldConvert - || nonConvertible)) { + if (willBusy) { state->confirmButtonBusy = true; send(); } else {