mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 23:24:01 +02:00
Added API support for premium giftcode options.
This commit is contained in:
parent
67bbb477c7
commit
e67d2e5db2
3 changed files with 116 additions and 6 deletions
|
@ -9,12 +9,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
#include "api/api_premium_option.h"
|
#include "api/api_premium_option.h"
|
||||||
#include "api/api_text_entities.h"
|
#include "api/api_text_entities.h"
|
||||||
#include "main/main_session.h"
|
|
||||||
#include "data/data_peer_values.h"
|
|
||||||
#include "data/data_document.h"
|
|
||||||
#include "data/data_session.h"
|
|
||||||
#include "data/data_peer.h"
|
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
#include "data/data_document.h"
|
||||||
|
#include "data/data_peer.h"
|
||||||
|
#include "data/data_peer_values.h"
|
||||||
|
#include "data/data_session.h"
|
||||||
|
#include "main/main_session.h"
|
||||||
|
#include "ui/text/format_values.h"
|
||||||
|
|
||||||
namespace Api {
|
namespace Api {
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -31,6 +32,24 @@ namespace {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] Data::SubscriptionOptions GiftCodesFromTL(
|
||||||
|
const QVector<MTPPremiumGiftCodeOption> &tlOptions) {
|
||||||
|
auto options = SubscriptionOptionsFromTL(tlOptions);
|
||||||
|
for (auto i = 0; i < options.size(); i++) {
|
||||||
|
const auto &tlOption = tlOptions[i].data();
|
||||||
|
const auto perUserText = Ui::FillAmountAndCurrency(
|
||||||
|
tlOption.vamount().v / float64(tlOption.vusers().v),
|
||||||
|
qs(tlOption.vcurrency()),
|
||||||
|
false);
|
||||||
|
options[i].costPerMonth = perUserText
|
||||||
|
+ ' '
|
||||||
|
+ QChar(0x00D7)
|
||||||
|
+ ' '
|
||||||
|
+ QString::number(tlOption.vusers().v);
|
||||||
|
}
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Premium::Premium(not_null<ApiWrap*> api)
|
Premium::Premium(not_null<ApiWrap*> api)
|
||||||
|
@ -311,4 +330,71 @@ const Data::SubscriptionOptions &Premium::subscriptionOptions() const {
|
||||||
return _subscriptionOptions;
|
return _subscriptionOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PremiumGiftCodeOptions::PremiumGiftCodeOptions(not_null<PeerData*> peer)
|
||||||
|
: _peer(peer)
|
||||||
|
, _api(&peer->session().api().instance()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<rpl::no_value, QString> PremiumGiftCodeOptions::request() {
|
||||||
|
return [=](auto consumer) {
|
||||||
|
auto lifetime = rpl::lifetime();
|
||||||
|
const auto channel = _peer->asChannel();
|
||||||
|
if (!channel) {
|
||||||
|
return lifetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
using TLOption = MTPPremiumGiftCodeOption;
|
||||||
|
_api.request(MTPpayments_GetPremiumGiftCodeOptions(
|
||||||
|
MTP_flags(
|
||||||
|
MTPpayments_GetPremiumGiftCodeOptions::Flag::f_boost_peer),
|
||||||
|
_peer->input
|
||||||
|
)).done([=](const MTPVector<TLOption> &result) {
|
||||||
|
auto tlMapOptions = base::flat_map<Amount, QVector<TLOption>>();
|
||||||
|
for (const auto &tlOption : result.v) {
|
||||||
|
const auto &data = tlOption.data();
|
||||||
|
tlMapOptions[data.vusers().v].push_back(tlOption);
|
||||||
|
}
|
||||||
|
for (const auto &[amount, tlOptions] : tlMapOptions) {
|
||||||
|
if (amount == 1) {
|
||||||
|
_optionsForOnePerson.currency = qs(
|
||||||
|
tlOptions.front().data().vcurrency());
|
||||||
|
for (const auto &option : tlOptions) {
|
||||||
|
_optionsForOnePerson.months.push_back(
|
||||||
|
option.data().vmonths().v);
|
||||||
|
_optionsForOnePerson.totalCosts.push_back(
|
||||||
|
option.data().vamount().v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_subscriptionOptions[amount] = GiftCodesFromTL(tlOptions);
|
||||||
|
}
|
||||||
|
consumer.put_done();
|
||||||
|
}).fail([=](const MTP::Error &error) {
|
||||||
|
consumer.put_error_copy(error.type());
|
||||||
|
}).send();
|
||||||
|
|
||||||
|
return lifetime;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Data::SubscriptionOptions PremiumGiftCodeOptions::options(int amount) {
|
||||||
|
const auto it = _subscriptionOptions.find(amount);
|
||||||
|
if (it != end(_subscriptionOptions)) {
|
||||||
|
return it->second;
|
||||||
|
} else {
|
||||||
|
auto tlOptions = QVector<MTPPremiumGiftCodeOption>();
|
||||||
|
for (auto i = 0; i < _optionsForOnePerson.months.size(); i++) {
|
||||||
|
tlOptions.push_back(MTP_premiumGiftCodeOption(
|
||||||
|
MTP_flags(MTPDpremiumGiftCodeOption::Flags(0)),
|
||||||
|
MTP_int(amount),
|
||||||
|
MTP_int(_optionsForOnePerson.months[i]),
|
||||||
|
MTPstring(),
|
||||||
|
MTPint(),
|
||||||
|
MTP_string(_optionsForOnePerson.currency),
|
||||||
|
MTP_long(_optionsForOnePerson.totalCosts[i] * amount)));
|
||||||
|
}
|
||||||
|
_subscriptionOptions[amount] = GiftCodesFromTL(tlOptions);
|
||||||
|
return _subscriptionOptions[amount];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Api
|
} // namespace Api
|
||||||
|
|
|
@ -141,4 +141,25 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PremiumGiftCodeOptions final {
|
||||||
|
public:
|
||||||
|
PremiumGiftCodeOptions(not_null<PeerData*> peer);
|
||||||
|
|
||||||
|
[[nodiscard]] rpl::producer<rpl::no_value, QString> request();
|
||||||
|
[[nodiscard]] Data::SubscriptionOptions options(int amount);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const not_null<PeerData*> _peer;
|
||||||
|
using Amount = int;
|
||||||
|
base::flat_map<Amount, Data::SubscriptionOptions> _subscriptionOptions;
|
||||||
|
struct {
|
||||||
|
std::vector<int> months;
|
||||||
|
std::vector<float64> totalCosts;
|
||||||
|
QString currency;
|
||||||
|
} _optionsForOnePerson;
|
||||||
|
|
||||||
|
MTP::Sender _api;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace Api
|
} // namespace Api
|
||||||
|
|
|
@ -36,7 +36,10 @@ template<typename Option>
|
||||||
result.reserve(tlOptions.size());
|
result.reserve(tlOptions.size());
|
||||||
for (const auto &tlOption : tlOptions) {
|
for (const auto &tlOption : tlOptions) {
|
||||||
const auto &option = tlOption.data();
|
const auto &option = tlOption.data();
|
||||||
const auto botUrl = qs(option.vbot_url());
|
auto botUrl = QString();
|
||||||
|
if constexpr (!std::is_same_v<Option, MTPPremiumGiftCodeOption>) {
|
||||||
|
botUrl = qs(option.vbot_url());
|
||||||
|
}
|
||||||
const auto months = option.vmonths().v;
|
const auto months = option.vmonths().v;
|
||||||
const auto amount = option.vamount().v;
|
const auto amount = option.vamount().v;
|
||||||
const auto currency = qs(option.vcurrency());
|
const auto currency = qs(option.vcurrency());
|
||||||
|
|
Loading…
Add table
Reference in a new issue