Added ability to create giveaways from giveaway box.

This commit is contained in:
23rd 2023-11-01 01:13:03 +03:00 committed by John Preston
parent 5e28b2d601
commit 85fdc04d48

View file

@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "api/api_premium.h" #include "api/api_premium.h"
#include "base/call_delayed.h" #include "base/call_delayed.h"
#include "base/unixtime.h" #include "base/unixtime.h"
#include "countries/countries_instance.h"
#include "data/data_peer.h" #include "data/data_peer.h"
#include "info/boosts/giveaway/giveaway_list_controllers.h" #include "info/boosts/giveaway/giveaway_list_controllers.h"
#include "info/boosts/giveaway/giveaway_type_row.h" #include "info/boosts/giveaway/giveaway_type_row.h"
@ -521,13 +522,21 @@ void CreateGiveawayBox(
if (state->confirmButtonBusy) { if (state->confirmButtonBusy) {
return; return;
} }
if (typeGroup->value() == GiveawayType::SpecificUsers) { const auto type = typeGroup->value();
if (state->selectedToAward.empty()) { const auto isSpecific = (type == GiveawayType::SpecificUsers);
const auto isRandom = (type == GiveawayType::Random);
if (!isSpecific && !isRandom) {
return; return;
} }
auto invoice = state->apiOptions.invoice( auto invoice = state->apiOptions.invoice(
state->selectedToAward.size(), isSpecific
? state->selectedToAward.size()
: state->sliderValue.current(),
durationGroup->value()); durationGroup->value());
if (isSpecific) {
if (state->selectedToAward.empty()) {
return;
}
invoice.purpose = Payments::InvoicePremiumGiftCodeUsers{ invoice.purpose = Payments::InvoicePremiumGiftCodeUsers{
ranges::views::all( ranges::views::all(
state->selectedToAward state->selectedToAward
@ -537,6 +546,21 @@ void CreateGiveawayBox(
}) | ranges::to_vector, }) | ranges::to_vector,
peer->asChannel(), peer->asChannel(),
}; };
} else if (isRandom) {
invoice.purpose = Payments::InvoicePremiumGiftCodeGiveaway{
.boostPeer = peer->asChannel(),
.additionalChannels = ranges::views::all(
state->selectedToSubscribe
) | ranges::views::transform([](
const not_null<PeerData*> p) {
return not_null{ p->asChannel() };
}) | ranges::to_vector,
.countries = state->countriesValue.current(),
.untilDate = state->dateValue.current(),
.onlyNewSubscribers = (membersGroup->value()
== GiveawayType::OnlyNewMembers),
};
}
state->confirmButtonBusy = true; state->confirmButtonBusy = true;
Payments::CheckoutProcess::Start( Payments::CheckoutProcess::Start(
std::move(invoice), std::move(invoice),
@ -544,7 +568,6 @@ void CreateGiveawayBox(
state->confirmButtonBusy = false; state->confirmButtonBusy = false;
box->window()->setFocus(); box->window()->setFocus();
})); }));
}
}); });
box->addButton(std::move(button)); box->addButton(std::move(button));
} }