From 46ab553fa54f8259333432fbe50d007dd059dfe0 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Thu, 31 Oct 2024 16:04:30 +0300
Subject: [PATCH] Rounded earn values from overview to two decimal digits.

---
 .../info/bot/earn/info_bot_earn_list.cpp            |  5 +++--
 .../info/channel_statistics/earn/earn_format.cpp    |  9 +++++++--
 .../info/channel_statistics/earn/earn_format.h      |  5 ++++-
 .../earn/info_channel_earn_list.cpp                 | 13 +++++++++----
 .../statistics/view/chart_rulers_view.cpp           |  2 +-
 .../statistics/widgets/point_details_widget.cpp     |  7 +++++--
 6 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp
index 8f612343e..a1ec88936 100644
--- a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp
+++ b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp
@@ -116,6 +116,7 @@ void InnerWidget::fill() {
 	const auto container = this;
 	const auto &data = _state;
 	const auto multiplier = data.usdRate * Data::kEarnMultiplier;
+	constexpr auto kMinorLength = 3;
 
 	auto availableBalanceValue = rpl::single(
 		data.availableBalance
@@ -166,7 +167,7 @@ void InnerWidget::fill() {
 				std::move(
 					value
 				) | rpl::map([=](uint64 v) {
-					return v ? ToUsd(v, multiplier) : QString();
+					return v ? ToUsd(v, multiplier, kMinorLength) : QString();
 				}),
 				st::channelEarnOverviewSubMinorLabel);
 			rpl::combine(
@@ -243,7 +244,7 @@ void InnerWidget::fill() {
 				return !dt.isNull() || (!_state.isWithdrawalEnabled);
 			}),
 			rpl::duplicate(availableBalanceValue) | rpl::map([=](uint64 v) {
-				return v ? ToUsd(v, multiplier) : QString();
+				return v ? ToUsd(v, multiplier, kMinorLength) : QString();
 			}));
 	}
 
diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp
index 4f87fa505..11f17b8b3 100644
--- a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp
+++ b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.cpp
@@ -46,7 +46,10 @@ QString MinorPart(EarnInt value) {
 	return result.chopped(zeroCount);
 }
 
-QString ToUsd(EarnInt value, float64 rate) {
+QString ToUsd(
+		Data::EarnInt value,
+		float64 rate,
+		int afterFloat) {
 	constexpr auto kApproximately = QChar(0x2248);
 
 	const auto result = value
@@ -56,7 +59,9 @@ QString ToUsd(EarnInt value, float64 rate) {
 	return QString(kApproximately)
 		+ QChar('$')
 		+ MajorPart(result)
-		+ MinorPart(result);
+		+ ((afterFloat > 0)
+			? MinorPart(result).left(afterFloat)
+			: MinorPart(result));
 }
 
 } // namespace Info::ChannelEarn
diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.h b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.h
index 4a7b401ab..7fcd19b4d 100644
--- a/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.h
+++ b/Telegram/SourceFiles/info/channel_statistics/earn/earn_format.h
@@ -13,6 +13,9 @@ namespace Info::ChannelEarn {
 
 [[nodiscard]] QString MajorPart(Data::EarnInt value);
 [[nodiscard]] QString MinorPart(Data::EarnInt value);
-[[nodiscard]] QString ToUsd(Data::EarnInt value, float64 rate);
+[[nodiscard]] QString ToUsd(
+	Data::EarnInt value,
+	float64 rate,
+	int afterFloat);
 
 } // namespace Info::ChannelEarn
diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp
index d4071225d..c7b2806e4 100644
--- a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp
+++ b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp
@@ -374,6 +374,7 @@ void InnerWidget::fill() {
 			) | rpl::map([this] { return _state.creditsEarn; })
 		);
 
+	constexpr auto kMinorLength = 3;
 	constexpr auto kMinus = QChar(0x2212);
 	//constexpr auto kApproximately = QChar(0x2248);
 	const auto multiplier = data.usdRate;
@@ -381,7 +382,7 @@ void InnerWidget::fill() {
 	const auto creditsToUsdMap = [=](EarnInt c) {
 		const auto creditsMultiplier = _state.creditsEarn.usdRate
 			* Data::kEarnMultiplier;
-		return c ? ToUsd(c, creditsMultiplier) : QString();
+		return c ? ToUsd(c, creditsMultiplier, 0) : QString();
 	};
 
 	const auto session = &_peer->session();
@@ -715,14 +716,18 @@ void InnerWidget::fill() {
 				{});
 			const auto minorLabel = Ui::CreateChild<Ui::FlatLabel>(
 				line,
-				rpl::duplicate(currencyValue) | rpl::map(MinorPart),
+				rpl::duplicate(currencyValue) | rpl::map([=](EarnInt v) {
+					return MinorPart(v).left(kMinorLength);
+				}),
 				st::channelEarnOverviewMinorLabel);
 			const auto secondMinorLabel = Ui::CreateChild<Ui::FlatLabel>(
 				line,
 				std::move(
 					currencyValue
 				) | rpl::map([=](EarnInt value) {
-					return value ? ToUsd(value, multiplier) : QString();
+					return value
+						? ToUsd(value, multiplier, kMinorLength)
+						: QString();
 				}),
 				st::channelEarnOverviewSubMinorLabel);
 
@@ -883,7 +888,7 @@ void InnerWidget::fill() {
 				container,
 				object_ptr<Ui::FlatLabel>(
 					container,
-					ToUsd(value, multiplier),
+					ToUsd(value, multiplier, 0),
 					st::channelEarnOverviewSubMinorLabel)));
 
 		Ui::AddSkip(container);
diff --git a/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp b/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp
index ac9dc4582..8a94d1084 100644
--- a/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp
+++ b/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp
@@ -43,7 +43,7 @@ void ChartRulersView::setChartData(
 			return FormatF(value / float64(Data::kEarnMultiplier));
 		};
 		_rightCustomCaption = [=, rate = chartData.currencyRate](float64 v) {
-			return Info::ChannelEarn::ToUsd(v, rate);
+			return Info::ChannelEarn::ToUsd(v, rate, 0);
 		};
 		_rightPen = QPen(st::windowSubTextFg);
 	}
diff --git a/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp b/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp
index dc0668e9a..1091c99f1 100644
--- a/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp
+++ b/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp
@@ -186,7 +186,10 @@ PointDetailsWidget::PointDetailsWidget(
 					QString::number(value / multiplier));
 				const auto usdText = Ui::Text::String(
 					_textStyle,
-					Info::ChannelEarn::ToUsd(value, _chartData.currencyRate));
+					Info::ChannelEarn::ToUsd(
+						value,
+						_chartData.currencyRate,
+						0));
 				const auto width = std::max(
 					usdText.maxWidth(),
 					valueText.maxWidth());
@@ -351,7 +354,7 @@ void PointDetailsWidget::setXIndex(int xIndex) {
 				_textStyle,
 				Info::ChannelEarn::ToUsd(
 					dataLine.y[xIndex],
-					_chartData.currencyRate));
+					_chartData.currencyRate, 0));
 		}
 		_lines.push_back(std::move(textLine));
 	}