From f1636de572e23b45768f46ee3aa7645f30ece5c8 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 16 May 2024 19:22:55 +0300 Subject: [PATCH] Added initial api support for credits topup options. --- Telegram/CMakeLists.txt | 4 ++ Telegram/SourceFiles/api/api_credits.cpp | 52 ++++++++++++++++++++++++ Telegram/SourceFiles/api/api_credits.h | 35 ++++++++++++++++ Telegram/SourceFiles/data/data_credits.h | 21 ++++++++++ Telegram/cmake/td_ui.cmake | 1 + 5 files changed, 113 insertions(+) create mode 100644 Telegram/SourceFiles/api/api_credits.cpp create mode 100644 Telegram/SourceFiles/api/api_credits.h create mode 100644 Telegram/SourceFiles/data/data_credits.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 21e22150df..b1b39f59f9 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -120,6 +120,8 @@ PRIVATE api/api_common.h api/api_confirm_phone.cpp api/api_confirm_phone.h + api/api_credits.cpp + api/api_credits.h api/api_earn.cpp api/api_earn.h api/api_editing.cpp @@ -1360,6 +1362,8 @@ PRIVATE settings/settings_codes.h settings/settings_common_session.cpp settings/settings_common_session.h + settings/settings_credits.cpp + settings/settings_credits.h settings/settings_experimental.cpp settings/settings_experimental.h settings/settings_folders.cpp diff --git a/Telegram/SourceFiles/api/api_credits.cpp b/Telegram/SourceFiles/api/api_credits.cpp new file mode 100644 index 0000000000..96b03a8e83 --- /dev/null +++ b/Telegram/SourceFiles/api/api_credits.cpp @@ -0,0 +1,52 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "api/api_credits.h" + +#include "apiwrap.h" +#include "data/data_peer.h" +#include "main/main_session.h" + +namespace Api { + +CreditsTopupOptions::CreditsTopupOptions(not_null peer) +: _peer(peer) +, _api(&peer->session().api().instance()) { +} + +rpl::producer CreditsTopupOptions::request() { + return [=](auto consumer) { + auto lifetime = rpl::lifetime(); + + using TLOption = MTPStarsTopupOption; + _api.request(MTPpayments_GetStarsTopupOptions( + )).done([=](const MTPVector &result) { + _options = ranges::views::all( + result.v + ) | ranges::views::transform([](const TLOption &option) { + return Data::CreditTopupOption{ + .credits = option.data().vstars().v, + .product = qs( + option.data().vstore_product().value_or_empty()), + .currency = qs(option.data().vcurrency()), + .amount = option.data().vamount().v, + }; + }) | ranges::to_vector; + consumer.put_done(); + }).fail([=](const MTP::Error &error) { + consumer.put_error_copy(error.type()); + }).send(); + + return lifetime; + }; +} + +Data::CreditTopupOptions CreditsTopupOptions::options() const { + return _options; +} + +} // namespace Api diff --git a/Telegram/SourceFiles/api/api_credits.h b/Telegram/SourceFiles/api/api_credits.h new file mode 100644 index 0000000000..61a568b621 --- /dev/null +++ b/Telegram/SourceFiles/api/api_credits.h @@ -0,0 +1,35 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#pragma once + +#include "data/data_credits.h" +#include "mtproto/sender.h" + +namespace Main { +class Session; +} // namespace Main + +namespace Api { + +class CreditsTopupOptions final { +public: + CreditsTopupOptions(not_null peer); + + [[nodiscard]] rpl::producer request(); + [[nodiscard]] Data::CreditTopupOptions options() const; + +private: + const not_null _peer; + + Data::CreditTopupOptions _options; + + MTP::Sender _api; + +}; + +} // namespace Api diff --git a/Telegram/SourceFiles/data/data_credits.h b/Telegram/SourceFiles/data/data_credits.h new file mode 100644 index 0000000000..db2ffec154 --- /dev/null +++ b/Telegram/SourceFiles/data/data_credits.h @@ -0,0 +1,21 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#pragma once + +namespace Data { + +struct CreditTopupOption final { + uint64 credits = 0; + QString product; + QString currency; + uint64 amount = 0; +}; + +using CreditTopupOptions = std::vector; + +} // namespace Data diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake index adf5b8f11e..987cca7219 100644 --- a/Telegram/cmake/td_ui.cmake +++ b/Telegram/cmake/td_ui.cmake @@ -80,6 +80,7 @@ PRIVATE data/data_birthday.cpp data/data_birthday.h data/data_channel_earn.h + data/data_credits.h data/data_statistics_chart.cpp data/data_statistics_chart.h data/data_subscription_option.h