mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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#other" = "Withdraw {emoji} {count} via Fragment";
|
||||||
"lng_bot_earn_balance_button_all" = "Withdraw all stars 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_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_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_out_ph" = "Enter amount to withdraw";
|
||||||
"lng_bot_earn_balance_password_title" = "Two-step verification";
|
"lng_bot_earn_balance_password_title" = "Two-step verification";
|
||||||
|
|
|
@ -237,27 +237,41 @@ rpl::producer<rpl::no_value, QString> CreditsEarnStatistics::request() {
|
||||||
return [=](auto consumer) {
|
return [=](auto consumer) {
|
||||||
auto lifetime = rpl::lifetime();
|
auto lifetime = rpl::lifetime();
|
||||||
|
|
||||||
makeRequest(MTPpayments_GetStarsRevenueStats(
|
const auto finish = [=](const QString &url) {
|
||||||
MTP_flags(0),
|
makeRequest(MTPpayments_GetStarsRevenueStats(
|
||||||
(_isUser ? user()->input : channel()->input)
|
MTP_flags(0),
|
||||||
)).done([=](const MTPpayments_StarsRevenueStats &result) {
|
(_isUser ? user()->input : channel()->input)
|
||||||
const auto &data = result.data();
|
)).done([=](const MTPpayments_StarsRevenueStats &result) {
|
||||||
const auto &status = data.vstatus().data();
|
const auto &data = result.data();
|
||||||
_data = Data::CreditsEarnStatistics{
|
const auto &status = data.vstatus().data();
|
||||||
.revenueGraph = StatisticalGraphFromTL(data.vrevenue_graph()),
|
_data = Data::CreditsEarnStatistics{
|
||||||
.currentBalance = status.vcurrent_balance().v,
|
.revenueGraph = StatisticalGraphFromTL(
|
||||||
.availableBalance = status.vavailable_balance().v,
|
data.vrevenue_graph()),
|
||||||
.overallRevenue = status.voverall_revenue().v,
|
.currentBalance = status.vcurrent_balance().v,
|
||||||
.usdRate = data.vusd_rate().v,
|
.availableBalance = status.vavailable_balance().v,
|
||||||
.isWithdrawalEnabled = status.is_withdrawal_enabled(),
|
.overallRevenue = status.voverall_revenue().v,
|
||||||
.nextWithdrawalAt = status.vnext_withdrawal_at()
|
.usdRate = data.vusd_rate().v,
|
||||||
? base::unixtime::parse(status.vnext_withdrawal_at()->v)
|
.isWithdrawalEnabled = status.is_withdrawal_enabled(),
|
||||||
: QDateTime(),
|
.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) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
consumer.put_error_copy(error.type());
|
finish({});
|
||||||
}).send();
|
}).send();
|
||||||
|
|
||||||
return lifetime;
|
return lifetime;
|
||||||
|
|
|
@ -26,6 +26,7 @@ struct CreditsEarnStatistics final {
|
||||||
float64 usdRate = 0.;
|
float64 usdRate = 0.;
|
||||||
bool isWithdrawalEnabled = false;
|
bool isWithdrawalEnabled = false;
|
||||||
QDateTime nextWithdrawalAt;
|
QDateTime nextWithdrawalAt;
|
||||||
|
QString buyAdsUrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Data
|
} // namespace Data
|
||||||
|
|
|
@ -234,6 +234,13 @@ void InnerWidget::fill() {
|
||||||
container,
|
container,
|
||||||
_controller->parentController(),
|
_controller->parentController(),
|
||||||
_peer,
|
_peer,
|
||||||
|
rpl::single(
|
||||||
|
data.buyAdsUrl
|
||||||
|
) | rpl::then(
|
||||||
|
_stateUpdated.events() | rpl::map([=] {
|
||||||
|
return _state.buyAdsUrl;
|
||||||
|
})
|
||||||
|
),
|
||||||
rpl::duplicate(availableBalanceValue),
|
rpl::duplicate(availableBalanceValue),
|
||||||
rpl::duplicate(dateValue),
|
rpl::duplicate(dateValue),
|
||||||
std::move(dateValue) | rpl::map([=](const QDateTime &dt) {
|
std::move(dateValue) | rpl::map([=](const QDateTime &dt) {
|
||||||
|
|
|
@ -935,6 +935,13 @@ void InnerWidget::fill() {
|
||||||
container,
|
container,
|
||||||
_controller->parentController(),
|
_controller->parentController(),
|
||||||
_peer,
|
_peer,
|
||||||
|
rpl::single(
|
||||||
|
creditsData.buyAdsUrl
|
||||||
|
) | rpl::then(
|
||||||
|
_stateUpdated.events() | rpl::map([=] {
|
||||||
|
return _state.creditsEarn.buyAdsUrl;
|
||||||
|
})
|
||||||
|
),
|
||||||
rpl::duplicate(availableBalanceValue),
|
rpl::duplicate(availableBalanceValue),
|
||||||
rpl::duplicate(dateValue),
|
rpl::duplicate(dateValue),
|
||||||
std::move(dateValue) | rpl::map([=](const QDateTime &dt) {
|
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/click_handler_types.h"
|
||||||
#include "core/ui_integration.h"
|
#include "core/ui_integration.h"
|
||||||
#include "data/data_file_origin.h"
|
#include "data/data_file_origin.h"
|
||||||
|
#include "core/click_handler_types.h" // UrlClickHandler
|
||||||
#include "data/data_photo_media.h"
|
#include "data/data_photo_media.h"
|
||||||
#include "data/data_session.h"
|
#include "data/data_session.h"
|
||||||
#include "data/data_user.h"
|
#include "data/data_user.h"
|
||||||
|
@ -662,6 +663,7 @@ void AddWithdrawalWidget(
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
not_null<Window::SessionController*> controller,
|
not_null<Window::SessionController*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
|
rpl::producer<QString> secondButtonUrl,
|
||||||
rpl::producer<uint64> availableBalanceValue,
|
rpl::producer<uint64> availableBalanceValue,
|
||||||
rpl::producer<QDateTime> dateValue,
|
rpl::producer<QDateTime> dateValue,
|
||||||
rpl::producer<bool> lockedValue,
|
rpl::producer<bool> lockedValue,
|
||||||
|
@ -712,13 +714,42 @@ void AddWithdrawalWidget(
|
||||||
Ui::AddSkip(container);
|
Ui::AddSkip(container);
|
||||||
|
|
||||||
const auto &stButton = st::defaultActiveButton;
|
const auto &stButton = st::defaultActiveButton;
|
||||||
const auto button = container->add(
|
const auto buttonsContainer = container->add(
|
||||||
object_ptr<Ui::RoundButton>(
|
Ui::CreateSkipWidget(container, stButton.height),
|
||||||
container,
|
|
||||||
rpl::never<QString>(),
|
|
||||||
stButton),
|
|
||||||
st::boxRowPadding);
|
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(
|
rpl::duplicate(
|
||||||
lockedValue
|
lockedValue
|
||||||
) | rpl::start_with_next([=](bool v) {
|
) | rpl::start_with_next([=](bool v) {
|
||||||
|
|
|
@ -43,6 +43,7 @@ void AddWithdrawalWidget(
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
not_null<Window::SessionController*> controller,
|
not_null<Window::SessionController*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
|
rpl::producer<QString> secondButtonUrl,
|
||||||
rpl::producer<uint64> availableBalanceValue,
|
rpl::producer<uint64> availableBalanceValue,
|
||||||
rpl::producer<QDateTime> dateValue,
|
rpl::producer<QDateTime> dateValue,
|
||||||
rpl::producer<bool> lockedValue,
|
rpl::producer<bool> lockedValue,
|
||||||
|
|
Loading…
Add table
Reference in a new issue