diff --git a/Telegram/SourceFiles/api/api_premium.cpp b/Telegram/SourceFiles/api/api_premium.cpp index 01579371d..1cc925e47 100644 --- a/Telegram/SourceFiles/api/api_premium.cpp +++ b/Telegram/SourceFiles/api/api_premium.cpp @@ -35,6 +35,14 @@ rpl::producer Premium::statusTextValue() const { _statusText.value_or(TextWithEntities())); } +int64 Premium::monthlyAmount() const { + return _monthlyAmount; +} + +QString Premium::monthlyCurrency() const { + return _monthlyCurrency; +} + void Premium::reload() { if (_statusRequestId) { return; @@ -43,6 +51,8 @@ void Premium::reload() { )).done([=](const MTPhelp_PremiumPromo &result) { _statusRequestId = 0; result.match([&](const MTPDhelp_premiumPromo &data) { + _monthlyAmount = data.vmonthly_amount().v; + _monthlyCurrency = qs(data.vcurrency()); auto text = TextWithEntities{ qs(data.vstatus_text()), EntitiesFromMTP(_session, data.vstatus_entities().v), diff --git a/Telegram/SourceFiles/api/api_premium.h b/Telegram/SourceFiles/api/api_premium.h index 5a4345d7e..921490cbc 100644 --- a/Telegram/SourceFiles/api/api_premium.h +++ b/Telegram/SourceFiles/api/api_premium.h @@ -24,6 +24,9 @@ public: void reload(); [[nodiscard]] rpl::producer statusTextValue() const; + [[nodiscard]] int64 monthlyAmount() const; + [[nodiscard]] QString monthlyCurrency() const; + private: const not_null _session; MTP::Sender _api; @@ -32,6 +35,9 @@ private: std::optional _statusText; rpl::event_stream _statusTextUpdates; + int64 _monthlyAmount = 0; + QString _monthlyCurrency; + }; } // namespace Api diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index cf9fd4e6b..ff62ae777 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -559,9 +559,7 @@ Main::Main( : Section(parent) , _controller(controller) { setupContent(controller); - if (_controller->session().premium()) { - _controller->session().api().premium().reload(); - } + _controller->session().api().premium().reload(); } rpl::producer Main::title() { diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index aa25bcc3d..dd5e5c03f 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/gradient.h" #include "ui/effects/premium_graphics.h" #include "ui/text/text_utilities.h" +#include "ui/text/format_values.h" #include "ui/widgets/gradient_round_button.h" #include "ui/widgets/labels.h" #include "ui/wrap/fade_wrap.h" @@ -166,6 +167,7 @@ using Order = std::vector; } [[nodiscard]] not_null CreateSubscribeButton( + not_null controller, not_null parent, Fn callback) { const auto result = Ui::CreateChild( @@ -177,9 +179,21 @@ using Order = std::vector; const auto &st = st::premiumPreviewBox.button; result->resize(parent->width(), st.height); + const auto premium = &controller->session().api().premium(); + const auto computeCost = [=] { + const auto amount = premium->monthlyAmount(); + const auto currency = premium->monthlyCurrency(); + const auto valid = (amount > 0) && !currency.isEmpty(); + return Ui::FillAmountAndCurrency( + valid ? amount : 500, + valid ? currency : "USD"); + }; + const auto label = Ui::CreateChild( result, - tr::lng_premium_summary_button(tr::now, lt_cost, "$5"), + tr::lng_premium_summary_button( + lt_cost, + premium->statusTextValue() | rpl::map(computeCost)), st::premiumPreviewButtonLabel); label->setAttribute(Qt::WA_TransparentForMouseEvents); rpl::combine( @@ -878,7 +892,7 @@ QPointer Premium::createPinnedToBottom( not_null parent) { const auto content = Ui::CreateChild(parent.get()); - const auto button = CreateSubscribeButton(content, [=] { + const auto button = CreateSubscribeButton(_controller, content, [=] { SendScreenAccept(_controller); StartPremiumPayment(_controller, _ref); });