mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-07-27 07:52:57 +02:00
Added initial entry point for self statistics of credits.
This commit is contained in:
parent
759258bb39
commit
067dcbfbeb
6 changed files with 116 additions and 49 deletions
|
@ -2780,6 +2780,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_credits_more_options" = "More Options";
|
||||
"lng_credits_balance_me" = "your balance";
|
||||
"lng_credits_buy_button" = "Buy More Stars";
|
||||
"lng_credits_buy_button_short" = "Top Up";
|
||||
"lng_credits_stats_button_short" = "Stats";
|
||||
"lng_credits_gift_button" = "Gift Stars to Friends";
|
||||
"lng_credits_box_out_title" = "Confirm Your Purchase";
|
||||
"lng_credits_box_out_sure#one" = "Do you want to buy **\"{text}\"** in **{bot}** for **{count} Star**?";
|
||||
|
@ -6431,6 +6433,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_bot_earn_balance_button_locked" = "Withdraw";
|
||||
"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_self_earn_learn_credits_out_about" = "You can withdraw from 10 Stars using Fragment. {link}";
|
||||
"lng_bot_earn_out_ph" = "Enter amount to withdraw";
|
||||
"lng_bot_earn_balance_password_title" = "Two-step verification";
|
||||
"lng_bot_earn_balance_password_description" = "Please enter your password to collect.";
|
||||
|
|
|
@ -128,6 +128,13 @@ void InnerWidget::fill() {
|
|||
return _state.availableBalance;
|
||||
})
|
||||
);
|
||||
auto overallBalanceValue = rpl::single(
|
||||
data.overallRevenue
|
||||
) | rpl::then(
|
||||
_stateUpdated.events() | rpl::map([=] {
|
||||
return _state.overallRevenue;
|
||||
})
|
||||
);
|
||||
auto valueToString = [](StarsAmount v) {
|
||||
return Lang::FormatStarsAmountDecimal(v);
|
||||
};
|
||||
|
@ -211,13 +218,7 @@ void InnerWidget::fill() {
|
|||
Ui::AddSkip(container);
|
||||
Ui::AddSkip(container);
|
||||
addOverview(
|
||||
rpl::single(
|
||||
data.overallRevenue
|
||||
) | rpl::then(
|
||||
_stateUpdated.events() | rpl::map([=] {
|
||||
return _state.overallRevenue;
|
||||
})
|
||||
),
|
||||
rpl::duplicate(overallBalanceValue),
|
||||
tr::lng_bot_earn_total);
|
||||
Ui::AddSkip(container);
|
||||
Ui::AddSkip(container);
|
||||
|
@ -245,17 +246,20 @@ void InnerWidget::fill() {
|
|||
return _state.buyAdsUrl;
|
||||
})
|
||||
),
|
||||
rpl::duplicate(availableBalanceValue),
|
||||
peer()->isSelf()
|
||||
? rpl::duplicate(overallBalanceValue)
|
||||
: rpl::duplicate(availableBalanceValue),
|
||||
rpl::duplicate(dateValue),
|
||||
_state.isWithdrawalEnabled,
|
||||
rpl::duplicate(
|
||||
availableBalanceValue
|
||||
(peer()->isSelf()
|
||||
? rpl::duplicate(overallBalanceValue)
|
||||
: rpl::duplicate(availableBalanceValue)
|
||||
) | rpl::map([=](StarsAmount v) {
|
||||
return v ? ToUsd(v, multiplier, kMinorLength) : QString();
|
||||
}));
|
||||
container->resizeToWidth(container->width());
|
||||
}
|
||||
if (BotStarRef::Join::Allowed(peer())) {
|
||||
if (BotStarRef::Join::Allowed(peer()) && !peer()->isSelf()) {
|
||||
const auto button = BotStarRef::AddViewListButton(
|
||||
container,
|
||||
tr::lng_credits_summary_earn_title(),
|
||||
|
@ -267,7 +271,9 @@ void InnerWidget::fill() {
|
|||
Ui::AddSkip(container);
|
||||
Ui::AddDivider(container);
|
||||
}
|
||||
fillHistory();
|
||||
if (!peer()->isSelf()) {
|
||||
fillHistory();
|
||||
}
|
||||
}
|
||||
|
||||
void InnerWidget::fillHistory() {
|
||||
|
|
|
@ -696,3 +696,12 @@ settingsGiftIconEmoji: IconEmoji {
|
|||
icon: icon{{ "settings/mini_gift", windowFg }};
|
||||
padding: margins(1px, 2px, 1px, 0px);
|
||||
}
|
||||
|
||||
settingsCreditsButtonBuy: RoundButton(inviteLinkCopy) {
|
||||
icon: icon {{ "settings/add", activeButtonFg, point(0px, 7px) }};
|
||||
iconOver: icon {{ "settings/add", activeButtonFgOver, point(0px, 7px) }};
|
||||
}
|
||||
settingsCreditsButtonStats: RoundButton(inviteLinkCopy) {
|
||||
icon: icon {{ "info/edit/links_share", activeButtonFg }};
|
||||
iconOver: icon {{ "info/edit/links_share", activeButtonFgOver }};
|
||||
}
|
||||
|
|
|
@ -123,7 +123,11 @@ not_null<Button*> AddButtonWithIcon(
|
|||
const style::SettingsButton &st,
|
||||
IconDescriptor &&descriptor) {
|
||||
return container->add(
|
||||
CreateButtonWithIcon(container, std::move(text), st, std::move(descriptor)));
|
||||
CreateButtonWithIcon(
|
||||
container,
|
||||
std::move(text),
|
||||
st,
|
||||
std::move(descriptor)));
|
||||
}
|
||||
|
||||
void CreateRightLabel(
|
||||
|
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "data/data_photo_media.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_user.h"
|
||||
#include "info/bot/earn/info_bot_earn_widget.h"
|
||||
#include "info/bot/starref/info_bot_starref_common.h"
|
||||
#include "info/bot/starref/info_bot_starref_join_widget.h"
|
||||
#include "info/channel_statistics/boosts/giveaway/boost_badge.h" // InfiniteRadialAnimationWidget.
|
||||
|
@ -433,32 +434,74 @@ void Credits::setupContent() {
|
|||
};
|
||||
const auto state = content->lifetime().make_state<State>();
|
||||
|
||||
const auto button = content->add(
|
||||
object_ptr<Ui::RoundButton>(
|
||||
content,
|
||||
rpl::conditional(
|
||||
state->buyStars.loadingValue(),
|
||||
rpl::single(QString()),
|
||||
tr::lng_credits_buy_button()),
|
||||
st::creditsSettingsBigBalanceButton),
|
||||
st::boxRowPadding);
|
||||
button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
|
||||
const auto show = _controller->uiShow();
|
||||
button->setClickedCallback(state->buyStars.handler(show, paid));
|
||||
{
|
||||
using namespace Info::Statistics;
|
||||
const auto loadingAnimation = InfiniteRadialAnimationWidget(
|
||||
button,
|
||||
button->height() / 2);
|
||||
AddChildToWidgetCenter(button, loadingAnimation);
|
||||
loadingAnimation->showOn(state->buyStars.loadingValue());
|
||||
}
|
||||
const auto paddings = rect::m::sum::h(st::boxRowPadding);
|
||||
button->widthValue() | rpl::filter([=] {
|
||||
return (button->widthNoMargins() != (content->width() - paddings));
|
||||
}) | rpl::start_with_next([=] {
|
||||
button->resizeToWidth(content->width() - paddings);
|
||||
}, button->lifetime());
|
||||
if (!_controller->session().credits().statsEnabled()) {
|
||||
const auto button = content->add(
|
||||
object_ptr<Ui::RoundButton>(
|
||||
content,
|
||||
rpl::conditional(
|
||||
state->buyStars.loadingValue(),
|
||||
rpl::single(QString()),
|
||||
tr::lng_credits_buy_button()),
|
||||
st::creditsSettingsBigBalanceButton),
|
||||
st::boxRowPadding);
|
||||
button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
|
||||
const auto show = _controller->uiShow();
|
||||
button->setClickedCallback(state->buyStars.handler(show, paid));
|
||||
{
|
||||
using namespace Info::Statistics;
|
||||
const auto loadingAnimation = InfiniteRadialAnimationWidget(
|
||||
button,
|
||||
button->height() / 2);
|
||||
AddChildToWidgetCenter(button, loadingAnimation);
|
||||
loadingAnimation->showOn(state->buyStars.loadingValue());
|
||||
}
|
||||
button->widthValue() | rpl::filter([=] {
|
||||
return button->widthNoMargins() != (content->width() - paddings);
|
||||
}) | rpl::start_with_next([=] {
|
||||
button->resizeToWidth(content->width() - paddings);
|
||||
}, button->lifetime());
|
||||
} else {
|
||||
const auto wrap = content->add(
|
||||
object_ptr<Ui::FixedHeightWidget>(
|
||||
content,
|
||||
st::inviteLinkButton.height),
|
||||
st::boxRowPadding);
|
||||
const auto buy = Ui::CreateChild<Ui::RoundButton>(
|
||||
wrap,
|
||||
tr::lng_credits_buy_button_short(),
|
||||
st::settingsCreditsButtonBuy);
|
||||
buy->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
|
||||
const auto show = _controller->uiShow();
|
||||
buy->setClickedCallback(state->buyStars.handler(show, paid));
|
||||
{
|
||||
using namespace Info::Statistics;
|
||||
const auto loadingAnimation = InfiniteRadialAnimationWidget(
|
||||
buy,
|
||||
buy->height() / 2);
|
||||
AddChildToWidgetCenter(buy, loadingAnimation);
|
||||
loadingAnimation->showOn(state->buyStars.loadingValue());
|
||||
}
|
||||
const auto stats = Ui::CreateChild<Ui::RoundButton>(
|
||||
wrap,
|
||||
tr::lng_credits_stats_button_short(),
|
||||
st::settingsCreditsButtonStats);
|
||||
stats->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
|
||||
const auto self = _controller->session().user();
|
||||
const auto controller = _controller->parentController();
|
||||
stats->setClickedCallback([=] {
|
||||
controller->showSection(Info::BotEarn::Make(self));
|
||||
});
|
||||
|
||||
wrap->widthValue(
|
||||
) | rpl::start_with_next([=](int width) {
|
||||
const auto buttonWidth = (width - st::inviteLinkButtonsSkip) / 2;
|
||||
buy->setFullWidth(buttonWidth);
|
||||
stats->setFullWidth(buttonWidth);
|
||||
buy->moveToLeft(0, 0, width);
|
||||
stats->moveToRight(0, 0, width);
|
||||
}, wrap->lifetime());
|
||||
}
|
||||
|
||||
Ui::AddSkip(content);
|
||||
|
||||
|
|
|
@ -2789,17 +2789,19 @@ void AddWithdrawalWidget(
|
|||
const auto arrow = Ui::Text::IconEmoji(&st::textMoreIconEmoji);
|
||||
auto about = Ui::CreateLabelWithCustomEmoji(
|
||||
container,
|
||||
tr::lng_bot_earn_learn_credits_out_about(
|
||||
lt_link,
|
||||
tr::lng_channel_earn_about_link(
|
||||
lt_emoji,
|
||||
rpl::single(arrow),
|
||||
Ui::Text::RichLangValue
|
||||
) | rpl::map([](TextWithEntities text) {
|
||||
return Ui::Text::Link(
|
||||
std::move(text),
|
||||
tr::lng_bot_earn_balance_about_url(tr::now));
|
||||
}),
|
||||
(peer->isSelf()
|
||||
? tr::lng_self_earn_learn_credits_out_about
|
||||
: tr::lng_bot_earn_learn_credits_out_about)(
|
||||
lt_link,
|
||||
tr::lng_channel_earn_about_link(
|
||||
lt_emoji,
|
||||
rpl::single(arrow),
|
||||
Ui::Text::RichLangValue
|
||||
) | rpl::map([](TextWithEntities text) {
|
||||
return Ui::Text::Link(
|
||||
std::move(text),
|
||||
tr::lng_bot_earn_balance_about_url(tr::now));
|
||||
}),
|
||||
Ui::Text::RichLangValue),
|
||||
Core::TextContext({ .session = session }),
|
||||
st::boxDividerLabel);
|
||||
|
|
Loading…
Add table
Reference in a new issue