From 838d5669ed45650fc94af5f01adfb275e15f1a08 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Thu, 15 Aug 2024 16:06:04 +0300
Subject: [PATCH] Replaced api for credits rate.

---
 .../SourceFiles/data/components/credits.cpp   | 25 ++++---------------
 .../ui/boxes/edit_invite_link_session.cpp     | 21 ++++++----------
 2 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/Telegram/SourceFiles/data/components/credits.cpp b/Telegram/SourceFiles/data/components/credits.cpp
index 016d8ef4a..34520f923 100644
--- a/Telegram/SourceFiles/data/components/credits.cpp
+++ b/Telegram/SourceFiles/data/components/credits.cpp
@@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 
 #include "api/api_credits.h"
 #include "data/data_user.h"
+#include "main/main_app_config.h"
 #include "main/main_session.h"
 
 namespace Data {
@@ -31,26 +32,10 @@ void Credits::apply(const MTPDupdateStarsBalance &data) {
 
 rpl::producer<float64> Credits::rateValue(
 		not_null<PeerData*> ownedBotOrChannel) {
-	// Should be replaced in the future.
-	if (_rate > 0) {
-		return rpl::single(_rate);
-	}
-	return [=](auto consumer) {
-		auto lifetime = rpl::lifetime();
-
-		const auto api = lifetime.make_state<Api::CreditsEarnStatistics>(
-			ownedBotOrChannel);
-		api->request(
-		) | rpl::start_with_done([=] {
-			_rate = api->data().usdRate;
-			if (_rate > 0) {
-				consumer.put_next_copy(_rate);
-				consumer.put_done();
-			}
-		}, lifetime);
-
-		return lifetime;
-	};
+	return rpl::single(
+		_session->appConfig().get<float64>(
+			u"stars_usd_withdraw_rate_x1000"_q,
+			1200) / 1000.);
 }
 
 void Credits::load(bool force) {
diff --git a/Telegram/SourceFiles/ui/boxes/edit_invite_link_session.cpp b/Telegram/SourceFiles/ui/boxes/edit_invite_link_session.cpp
index 8b0260d3a..862b6b679 100644
--- a/Telegram/SourceFiles/ui/boxes/edit_invite_link_session.cpp
+++ b/Telegram/SourceFiles/ui/boxes/edit_invite_link_session.cpp
@@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #include "ui/boxes/edit_invite_link_session.h"
 
-#include "api/api_credits.h"
+#include "data/components/credits.h"
 #include "data/data_peer.h"
 #include "data/data_session.h"
 #include "data/stickers/data_custom_emoji.h"
@@ -39,7 +39,7 @@ InviteLinkSubscriptionToggle FillCreateInviteLinkSubscriptionToggle(
 		not_null<Ui::GenericBox*> box,
 		not_null<PeerData*> peer) {
 	struct State final {
-		float64 usdRate = 0;
+		rpl::variable<float64> usdRate = 0;
 	};
 	const auto state = box->lifetime().make_state<State>();
 	const auto currency = u"USD"_q;
@@ -101,7 +101,7 @@ InviteLinkSubscriptionToggle FillCreateInviteLinkSubscriptionToggle(
 	});
 	priceOverlay->paintRequest(
 	) | rpl::start_with_next([=, right = st::boxRowPadding.right()] {
-		if (state->usdRate <= 0) {
+		if (state->usdRate.current() <= 0) {
 			return;
 		}
 		const auto amount = input->getLastText().toDouble();
@@ -111,7 +111,9 @@ InviteLinkSubscriptionToggle FillCreateInviteLinkSubscriptionToggle(
 		const auto text = tr::lng_group_invite_subscription_price(
 			tr::now,
 			lt_cost,
-			Ui::FillAmountAndCurrency(amount * state->usdRate, currency));
+			Ui::FillAmountAndCurrency(
+				amount * state->usdRate.current(),
+				currency));
 		auto p = QPainter(priceOverlay);
 		p.setFont(st.placeholderFont);
 		p.setPen(st.placeholderFg);
@@ -120,16 +122,7 @@ InviteLinkSubscriptionToggle FillCreateInviteLinkSubscriptionToggle(
 		p.drawText(priceOverlay->rect() - m, text, style::al_right);
 	}, priceOverlay->lifetime());
 
-	{
-		auto &lifetime = priceOverlay->lifetime();
-		const auto api = lifetime.make_state<Api::CreditsEarnStatistics>(
-			peer);
-		api->request(
-		) | rpl::start_with_done([=] {
-			state->usdRate = api->data().usdRate;
-			priceOverlay->update();
-		}, priceOverlay->lifetime());
-	}
+	state->usdRate = peer->session().credits().rateValue(peer);
 
 	const auto arrow = Ui::Text::SingleCustomEmoji(
 		peer->owner().customEmojiManager().registerInternalEmoji(