mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-14 13:17:08 +02:00
Added initial ability to reinvest existing credits for channels.
This commit is contained in:
parent
b674826392
commit
d9caf15d1d
7 changed files with 86 additions and 24 deletions
|
@ -5229,6 +5229,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_bot_earn_balance_button#other" = "Withdraw {emoji} {count} via Fragment";
|
||||
"lng_bot_earn_balance_button_all" = "Withdraw all stars via Fragment";
|
||||
"lng_bot_earn_balance_button_locked" = "Withdraw via Fragment";
|
||||
"lng_bot_earn_balance_button_buy_ads" = "Buy Ads";
|
||||
"lng_bot_earn_learn_credits_out_about" = "You can withdraw Stars using Fragment, or use Stars to advertise your bot. {link}";
|
||||
"lng_bot_earn_out_ph" = "Enter amount to withdraw";
|
||||
"lng_bot_earn_balance_password_title" = "Two-step verification";
|
||||
|
|
|
@ -237,27 +237,41 @@ rpl::producer<rpl::no_value, QString> CreditsEarnStatistics::request() {
|
|||
return [=](auto consumer) {
|
||||
auto lifetime = rpl::lifetime();
|
||||
|
||||
makeRequest(MTPpayments_GetStarsRevenueStats(
|
||||
MTP_flags(0),
|
||||
(_isUser ? user()->input : channel()->input)
|
||||
)).done([=](const MTPpayments_StarsRevenueStats &result) {
|
||||
const auto &data = result.data();
|
||||
const auto &status = data.vstatus().data();
|
||||
_data = Data::CreditsEarnStatistics{
|
||||
.revenueGraph = StatisticalGraphFromTL(data.vrevenue_graph()),
|
||||
.currentBalance = status.vcurrent_balance().v,
|
||||
.availableBalance = status.vavailable_balance().v,
|
||||
.overallRevenue = status.voverall_revenue().v,
|
||||
.usdRate = data.vusd_rate().v,
|
||||
.isWithdrawalEnabled = status.is_withdrawal_enabled(),
|
||||
.nextWithdrawalAt = status.vnext_withdrawal_at()
|
||||
? base::unixtime::parse(status.vnext_withdrawal_at()->v)
|
||||
: QDateTime(),
|
||||
};
|
||||
const auto finish = [=](const QString &url) {
|
||||
makeRequest(MTPpayments_GetStarsRevenueStats(
|
||||
MTP_flags(0),
|
||||
(_isUser ? user()->input : channel()->input)
|
||||
)).done([=](const MTPpayments_StarsRevenueStats &result) {
|
||||
const auto &data = result.data();
|
||||
const auto &status = data.vstatus().data();
|
||||
_data = Data::CreditsEarnStatistics{
|
||||
.revenueGraph = StatisticalGraphFromTL(
|
||||
data.vrevenue_graph()),
|
||||
.currentBalance = status.vcurrent_balance().v,
|
||||
.availableBalance = status.vavailable_balance().v,
|
||||
.overallRevenue = status.voverall_revenue().v,
|
||||
.usdRate = data.vusd_rate().v,
|
||||
.isWithdrawalEnabled = status.is_withdrawal_enabled(),
|
||||
.nextWithdrawalAt = status.vnext_withdrawal_at()
|
||||
? base::unixtime::parse(
|
||||
status.vnext_withdrawal_at()->v)
|
||||
: QDateTime(),
|
||||
.buyAdsUrl = url,
|
||||
};
|
||||
|
||||
consumer.put_done();
|
||||
consumer.put_done();
|
||||
}).fail([=](const MTP::Error &error) {
|
||||
consumer.put_error_copy(error.type());
|
||||
}).send();
|
||||
};
|
||||
|
||||
makeRequest(
|
||||
MTPpayments_GetStarsRevenueAdsAccountUrl(
|
||||
(_isUser ? user()->input : channel()->input))
|
||||
).done([=](const MTPpayments_StarsRevenueAdsAccountUrl &result) {
|
||||
finish(qs(result.data().vurl()));
|
||||
}).fail([=](const MTP::Error &error) {
|
||||
consumer.put_error_copy(error.type());
|
||||
finish({});
|
||||
}).send();
|
||||
|
||||
return lifetime;
|
||||
|
|
|
@ -26,6 +26,7 @@ struct CreditsEarnStatistics final {
|
|||
float64 usdRate = 0.;
|
||||
bool isWithdrawalEnabled = false;
|
||||
QDateTime nextWithdrawalAt;
|
||||
QString buyAdsUrl;
|
||||
};
|
||||
|
||||
} // namespace Data
|
||||
|
|
|
@ -234,6 +234,13 @@ void InnerWidget::fill() {
|
|||
container,
|
||||
_controller->parentController(),
|
||||
_peer,
|
||||
rpl::single(
|
||||
data.buyAdsUrl
|
||||
) | rpl::then(
|
||||
_stateUpdated.events() | rpl::map([=] {
|
||||
return _state.buyAdsUrl;
|
||||
})
|
||||
),
|
||||
rpl::duplicate(availableBalanceValue),
|
||||
rpl::duplicate(dateValue),
|
||||
std::move(dateValue) | rpl::map([=](const QDateTime &dt) {
|
||||
|
|
|
@ -935,6 +935,13 @@ void InnerWidget::fill() {
|
|||
container,
|
||||
_controller->parentController(),
|
||||
_peer,
|
||||
rpl::single(
|
||||
creditsData.buyAdsUrl
|
||||
) | rpl::then(
|
||||
_stateUpdated.events() | rpl::map([=] {
|
||||
return _state.creditsEarn.buyAdsUrl;
|
||||
})
|
||||
),
|
||||
rpl::duplicate(availableBalanceValue),
|
||||
rpl::duplicate(dateValue),
|
||||
std::move(dateValue) | rpl::map([=](const QDateTime &dt) {
|
||||
|
|
|
@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "core/click_handler_types.h"
|
||||
#include "core/ui_integration.h"
|
||||
#include "data/data_file_origin.h"
|
||||
#include "core/click_handler_types.h" // UrlClickHandler
|
||||
#include "data/data_photo_media.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_user.h"
|
||||
|
@ -662,6 +663,7 @@ void AddWithdrawalWidget(
|
|||
not_null<Ui::VerticalLayout*> container,
|
||||
not_null<Window::SessionController*> controller,
|
||||
not_null<PeerData*> peer,
|
||||
rpl::producer<QString> secondButtonUrl,
|
||||
rpl::producer<uint64> availableBalanceValue,
|
||||
rpl::producer<QDateTime> dateValue,
|
||||
rpl::producer<bool> lockedValue,
|
||||
|
@ -712,13 +714,42 @@ void AddWithdrawalWidget(
|
|||
Ui::AddSkip(container);
|
||||
|
||||
const auto &stButton = st::defaultActiveButton;
|
||||
const auto button = container->add(
|
||||
object_ptr<Ui::RoundButton>(
|
||||
container,
|
||||
rpl::never<QString>(),
|
||||
stButton),
|
||||
const auto buttonsContainer = container->add(
|
||||
Ui::CreateSkipWidget(container, stButton.height),
|
||||
st::boxRowPadding);
|
||||
|
||||
const auto button = Ui::CreateChild<Ui::RoundButton>(
|
||||
buttonsContainer,
|
||||
rpl::never<QString>(),
|
||||
stButton);
|
||||
|
||||
const auto buttonCredits = Ui::CreateChild<Ui::RoundButton>(
|
||||
buttonsContainer,
|
||||
tr::lng_bot_earn_balance_button_buy_ads(),
|
||||
stButton);
|
||||
buttonCredits->setTextTransform(
|
||||
Ui::RoundButton::TextTransform::NoTransform);
|
||||
|
||||
Ui::ToggleChildrenVisibility(buttonsContainer, true);
|
||||
|
||||
rpl::combine(
|
||||
std::move(secondButtonUrl),
|
||||
buttonsContainer->sizeValue()
|
||||
) | rpl::start_with_next([=](const QString &url, const QSize &size) {
|
||||
if (url.isEmpty()) {
|
||||
button->resize(size.width(), size.height());
|
||||
buttonCredits->resize(0, 0);
|
||||
} else {
|
||||
const auto w = size.width() - st::boxRowPadding.left() / 2;
|
||||
button->resize(w / 2, size.height());
|
||||
buttonCredits->resize(w / 2, size.height());
|
||||
buttonCredits->moveToRight(0, 0);
|
||||
buttonCredits->setClickedCallback([=] {
|
||||
UrlClickHandler::Open(url);
|
||||
});
|
||||
}
|
||||
}, buttonsContainer->lifetime());
|
||||
|
||||
rpl::duplicate(
|
||||
lockedValue
|
||||
) | rpl::start_with_next([=](bool v) {
|
||||
|
|
|
@ -43,6 +43,7 @@ void AddWithdrawalWidget(
|
|||
not_null<Ui::VerticalLayout*> container,
|
||||
not_null<Window::SessionController*> controller,
|
||||
not_null<PeerData*> peer,
|
||||
rpl::producer<QString> secondButtonUrl,
|
||||
rpl::producer<uint64> availableBalanceValue,
|
||||
rpl::producer<QDateTime> dateValue,
|
||||
rpl::producer<bool> lockedValue,
|
||||
|
|
Loading…
Add table
Reference in a new issue