From 32a39525247fc1b4aa1b86087225cc1ef58568a0 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 26 Mar 2024 06:27:58 +0300 Subject: [PATCH] Added initial support of channel cpm from earn channel api. --- Telegram/SourceFiles/api/api_statistics.cpp | 14 +++++++++++++- Telegram/SourceFiles/data/data_statistics.h | 1 + .../earn/info_earn_inner_widget.cpp | 13 ++++++------- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/api/api_statistics.cpp b/Telegram/SourceFiles/api/api_statistics.cpp index 4418aa3d5..fa617293f 100644 --- a/Telegram/SourceFiles/api/api_statistics.cpp +++ b/Telegram/SourceFiles/api/api_statistics.cpp @@ -773,7 +773,19 @@ rpl::producer EarnStatistics::request() { requestBoosts({}, [=](Data::EarnHistorySlice &&slice) { _data.firstHistorySlice = std::move(slice); - consumer.put_done(); + + api().request( + MTPchannels_GetFullChannel(channel()->inputChannel) + ).done([=](const MTPmessages_ChatFull &result) { + result.data().vfull_chat().match([&]( + const MTPDchannelFull &d) { + _data.minCpm = d.vsponsored_min_cpm().value_or(-1); + }, [](const auto &) { + }); + consumer.put_done(); + }).fail([=](const MTP::Error &error) { + consumer.put_error_copy(error.type()); + }).send(); }); }).fail([=](const MTP::Error &error) { consumer.put_error_copy(error.type()); diff --git a/Telegram/SourceFiles/data/data_statistics.h b/Telegram/SourceFiles/data/data_statistics.h index 2599cfc49..9746b067e 100644 --- a/Telegram/SourceFiles/data/data_statistics.h +++ b/Telegram/SourceFiles/data/data_statistics.h @@ -202,6 +202,7 @@ struct EarnStatistics final { EarnInt availableBalance = 0; EarnInt overallRevenue = 0; float64 usdRate = 0.; + int minCpm = -1; EarnHistorySlice firstHistorySlice; }; diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/info_earn_inner_widget.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/info_earn_inner_widget.cpp index 95dc86e4e..d81213f35 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/info_earn_inner_widget.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/earn/info_earn_inner_widget.cpp @@ -49,20 +49,20 @@ namespace { using EarnInt = Data::EarnInt; +constexpr auto kMultiplier = EarnInt(1000000000); constexpr auto kMinorPartLength = 9; constexpr auto kZero = QChar('0'); constexpr auto kDot = QChar('.'); [[nodiscard]] QString MajorPart(EarnInt value) { const auto string = QString::number(value); - return (string.size() < kMinorPartLength) - ? QString(kZero) - : string.mid(0, kMinorPartLength); + const auto diff = int(string.size()) - kMinorPartLength; + return (diff <= 0) ? QString(kZero) : string.mid(0, diff); } [[nodiscard]] QString MinorPart(EarnInt value) { if (!value) { - return QString(kDot) + kZero; + return QString(kDot) + kZero + kZero; } const auto string = QString::number(value); const auto diff = int(string.size()) - kMinorPartLength; @@ -86,7 +86,6 @@ constexpr auto kDot = QChar('.'); [[nodiscard]] QString ToUsd(EarnInt value, float64 rate) { constexpr auto kApproximately = QChar(0x2248); - constexpr auto kMultiplier = EarnInt(1000000000); const auto multiplier = EarnInt(rate * kMultiplier); const auto result = (value * multiplier) / kMultiplier; return QString(kApproximately) @@ -857,7 +856,7 @@ void InnerWidget::fill() { const auto right = Ui::CreateChild( line, st::defaultFlatLabel); - addEmojiToMajor(right, kMaxCPM); + addEmojiToMajor(right, kMaxCPM * kMultiplier); const auto slider = Ui::CreateChild( line, st::settingsScale); @@ -913,7 +912,7 @@ void InnerWidget::fill() { ? std::make_optional(activeColor) : std::nullopt); }; - const auto current = kMaxCPM / 2; + const auto current = std::max(0, data.minCpm); slider->setPseudoDiscrete( kMaxCPM + 1, [=](int index) { return index; },