diff --git a/Telegram/SourceFiles/api/api_updates.cpp b/Telegram/SourceFiles/api/api_updates.cpp index 56f8a8da4..0ebf17f33 100644 --- a/Telegram/SourceFiles/api/api_updates.cpp +++ b/Telegram/SourceFiles/api/api_updates.cpp @@ -2614,6 +2614,11 @@ void Updates::feedUpdate(const MTPUpdate &update) { _session->data().stories().apply(data.vstealth_mode()); } break; + case mtpc_updateStarsBalance: { + const auto &data = update.c_updateStarsBalance(); + _session->setCredits(data.vbalance().v); + } break; + } } diff --git a/Telegram/SourceFiles/main/main_session.cpp b/Telegram/SourceFiles/main/main_session.cpp index aa70700ec..fc8435d66 100644 --- a/Telegram/SourceFiles/main/main_session.cpp +++ b/Telegram/SourceFiles/main/main_session.cpp @@ -280,6 +280,14 @@ bool Session::premiumCanBuy() const { return _premiumPossible.current(); } +rpl::producer Session::creditsValue() const { + return _credits.value(); +} + +void Session::setCredits(uint64 credits) { + _credits = credits; +} + bool Session::isTestMode() const { return mtp().isTestMode(); } diff --git a/Telegram/SourceFiles/main/main_session.h b/Telegram/SourceFiles/main/main_session.h index 8d1b276ec..85aa2fe08 100644 --- a/Telegram/SourceFiles/main/main_session.h +++ b/Telegram/SourceFiles/main/main_session.h @@ -100,6 +100,9 @@ public: [[nodiscard]] bool premiumBadgesShown() const; [[nodiscard]] bool premiumCanBuy() const; + [[nodiscard]] rpl::producer creditsValue() const; + void setCredits(uint64 credits); + [[nodiscard]] bool isTestMode() const; [[nodiscard]] uint64 uniqueId() const; // userId() with TestDC shift. [[nodiscard]] UserId userId() const; @@ -258,6 +261,7 @@ private: const std::unique_ptr _supportHelper; std::shared_ptr _selfUserpicView; + rpl::variable _credits = 0; rpl::variable _premiumPossible = false; rpl::event_stream _termsLockChanges; diff --git a/Telegram/SourceFiles/settings/settings_credits.cpp b/Telegram/SourceFiles/settings/settings_credits.cpp index 71ea3a9e1..67f9e2a3e 100644 --- a/Telegram/SourceFiles/settings/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/settings_credits.cpp @@ -578,12 +578,16 @@ QPointer Credits::createPinnedToTop( + diffBetweenStarAndCount), label->style()->font->height + starSize.height()); }; - api->request({}, [=](Data::CreditsStatusSlice slice) { + _controller->session().creditsValue( + ) | rpl::start_with_next([=](uint64 value) { count->setText( st::semiboldTextStyle, - Lang::FormatCountToShort(slice.balance).string); - balance->setBalance(slice.balance); + Lang::FormatCountToShort(value).string); + balance->setBalance(value); resize(); + }, balance->lifetime()); + api->request({}, [=](Data::CreditsStatusSlice slice) { + _controller->session().setCredits(slice.balance); }); balance->paintRequest( ) | rpl::start_with_next([=] { diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index 332677a93..9f2e73072 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "settings/settings_main.h" +#include "api/api_credits.h" #include "core/application.h" #include "core/click_handler_types.h" #include "settings/settings_advanced.h" @@ -491,9 +492,13 @@ void SetupPremium( showOther(PremiumId()); }); AddPremiumStar( - AddButtonWithIcon( + AddButtonWithLabel( container, tr::lng_credits_summary_title(), + controller->session().creditsValue( + ) | rpl::map([=](uint64 c) { + return c ? Lang::FormatCountToShort(c).string : QString{}; + }), st::settingsButton), true )->addClickHandler([=] { @@ -510,6 +515,12 @@ void SetupPremium( }); Ui::NewBadge::AddToRight(button); + const auto api = button->lifetime().make_state( + controller->session().user()); + api->request({}, [=](Data::CreditsStatusSlice slice) { + controller->session().setCredits(slice.balance); + }); + if (controller->session().premiumCanBuy()) { const auto button = AddButtonWithIcon( container,