From a11d3efed641885c6b83a9ac1efa50daaeaa2b61 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 29 Jun 2025 15:44:32 +0300 Subject: [PATCH] Added support of usd rate for withdrawal from app config. --- .../SourceFiles/data/components/credits.cpp | 4 ++++ .../SourceFiles/data/components/credits.h | 1 + Telegram/SourceFiles/data/data_channel_earn.h | 2 +- .../channel_statistics/earn/earn_format.cpp | 8 +++---- Telegram/SourceFiles/main/main_app_config.cpp | 4 ++++ Telegram/SourceFiles/main/main_app_config.h | 1 + .../SourceFiles/settings/settings_credits.cpp | 21 +++++++++++++++++++ 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/data/components/credits.cpp b/Telegram/SourceFiles/data/components/credits.cpp index c38c64ac85..147999dd73 100644 --- a/Telegram/SourceFiles/data/components/credits.cpp +++ b/Telegram/SourceFiles/data/components/credits.cpp @@ -36,6 +36,10 @@ rpl::producer Credits::rateValue( return rpl::single(_session->appConfig().starsWithdrawRate()); } +float64 Credits::usdRate() const { + return _session->appConfig().currencyWithdrawRate(); +} + void Credits::load(bool force) { if (_loader || (!force diff --git a/Telegram/SourceFiles/data/components/credits.h b/Telegram/SourceFiles/data/components/credits.h index 715c88c456..c7a7325c4f 100644 --- a/Telegram/SourceFiles/data/components/credits.h +++ b/Telegram/SourceFiles/data/components/credits.h @@ -24,6 +24,7 @@ public: [[nodiscard]] CreditsAmount balance() const; [[nodiscard]] CreditsAmount balance(PeerId peerId) const; [[nodiscard]] rpl::producer balanceValue() const; + [[nodiscard]] float64 usdRate() const; [[nodiscard]] rpl::producer rateValue( not_null ownedBotOrChannel); diff --git a/Telegram/SourceFiles/data/data_channel_earn.h b/Telegram/SourceFiles/data/data_channel_earn.h index cd7e5a75f6..63c1c962a4 100644 --- a/Telegram/SourceFiles/data/data_channel_earn.h +++ b/Telegram/SourceFiles/data/data_channel_earn.h @@ -15,7 +15,7 @@ namespace Data { using EarnInt = uint64; -constexpr auto kEarnMultiplier = EarnInt(1000000000); +constexpr auto kEarnMultiplier = EarnInt(1); struct EarnHistoryEntry final { enum class Type { diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp index 6554a45c9e..b3550718b8 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp @@ -70,10 +70,10 @@ QString ToUsd( const auto result = int64(base::SafeRound(value.value() * rate)); return QString(kApproximately) + QChar('$') - + MajorPart(result) - + ((afterFloat > 0) - ? MinorPart(result).left(afterFloat) - : MinorPart(result)); + + QString::number( + value.value() * rate, + 'f', + afterFloat ? afterFloat : 2); } } // namespace Info::ChannelEarn diff --git a/Telegram/SourceFiles/main/main_app_config.cpp b/Telegram/SourceFiles/main/main_app_config.cpp index 9d6377e11d..0c5941edeb 100644 --- a/Telegram/SourceFiles/main/main_app_config.cpp +++ b/Telegram/SourceFiles/main/main_app_config.cpp @@ -93,6 +93,10 @@ float64 AppConfig::starsWithdrawRate() const { return get(u"stars_usd_withdraw_rate_x1000"_q, 1300) / 1000.; } +float64 AppConfig::currencyWithdrawRate() const { + return get(u"ton_usd_rate"_q, 1); +} + bool AppConfig::paidMessagesAvailable() const { return get(u"stars_paid_messages_available"_q, false); } diff --git a/Telegram/SourceFiles/main/main_app_config.h b/Telegram/SourceFiles/main/main_app_config.h index 1fb4ab99e1..2e376125e8 100644 --- a/Telegram/SourceFiles/main/main_app_config.h +++ b/Telegram/SourceFiles/main/main_app_config.h @@ -70,6 +70,7 @@ public: [[nodiscard]] int starrefCommissionMax() const; [[nodiscard]] float64 starsWithdrawRate() const; + [[nodiscard]] float64 currencyWithdrawRate() const; [[nodiscard]] bool paidMessagesAvailable() const; [[nodiscard]] int paidMessageStarsMax() const; [[nodiscard]] int paidMessageCommission() const; diff --git a/Telegram/SourceFiles/settings/settings_credits.cpp b/Telegram/SourceFiles/settings/settings_credits.cpp index ff144bfa24..9b7b82bb9f 100644 --- a/Telegram/SourceFiles/settings/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/settings_credits.cpp @@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/bot/starref/info_bot_starref_common.h" #include "info/bot/starref/info_bot_starref_join_widget.h" #include "info/channel_statistics/boosts/giveaway/boost_badge.h" // InfiniteRadialAnimationWidget. +#include "info/channel_statistics/earn/earn_format.h" #include "info/channel_statistics/earn/earn_icons.h" #include "info/settings/info_settings_widget.h" // SectionCustomTopBarData. #include "info/statistics/info_statistics_list_controllers.h" @@ -57,6 +58,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #include "styles/style_statistics.h" #include "styles/style_menu_icons.h" +#include "styles/style_channel_earn.h" namespace Settings { namespace { @@ -517,6 +519,25 @@ void Credits::setupContent() { textSt, st::defaultPopupMenu, std::move(context)))); + if (isCurrency) { + const auto rate = _controller->session().credits().usdRate(); + const auto wrap = content->add( + object_ptr>( + content, + object_ptr>( + content, + object_ptr( + content, + _controller->session().credits().tonBalanceValue( + ) | rpl::map([=](CreditsAmount value) { + using namespace Info::ChannelEarn; + return value ? ToUsd(value, rate, 3) : QString(); + }), + st::channelEarnOverviewSubMinorLabel)))); + wrap->toggleOn(_controller->session().credits().tonBalanceValue( + ) | rpl::map(rpl::mappers::_1 > CreditsAmount(0))); + wrap->finishAnimating(); + } Ui::AddSkip(content, st::lineWidth); Ui::AddSkip(content, st::lineWidth); Ui::AddSkip(content);