1
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-03-29 23:08:09 +00:00

Show real subscription price from the API.

This commit is contained in:
John Preston 2022-06-03 15:57:06 +04:00
parent 6454f67e74
commit 499923b6d3
4 changed files with 33 additions and 5 deletions

View File

@ -35,6 +35,14 @@ rpl::producer<TextWithEntities> Premium::statusTextValue() const {
_statusText.value_or(TextWithEntities()));
}
int64 Premium::monthlyAmount() const {
return _monthlyAmount;
}
QString Premium::monthlyCurrency() const {
return _monthlyCurrency;
}
void Premium::reload() {
if (_statusRequestId) {
return;
@ -43,6 +51,8 @@ void Premium::reload() {
)).done([=](const MTPhelp_PremiumPromo &result) {
_statusRequestId = 0;
result.match([&](const MTPDhelp_premiumPromo &data) {
_monthlyAmount = data.vmonthly_amount().v;
_monthlyCurrency = qs(data.vcurrency());
auto text = TextWithEntities{
qs(data.vstatus_text()),
EntitiesFromMTP(_session, data.vstatus_entities().v),

View File

@ -24,6 +24,9 @@ public:
void reload();
[[nodiscard]] rpl::producer<TextWithEntities> statusTextValue() const;
[[nodiscard]] int64 monthlyAmount() const;
[[nodiscard]] QString monthlyCurrency() const;
private:
const not_null<Main::Session*> _session;
MTP::Sender _api;
@ -32,6 +35,9 @@ private:
std::optional<TextWithEntities> _statusText;
rpl::event_stream<TextWithEntities> _statusTextUpdates;
int64 _monthlyAmount = 0;
QString _monthlyCurrency;
};
} // namespace Api

View File

@ -559,9 +559,7 @@ Main::Main(
: Section(parent)
, _controller(controller) {
setupContent(controller);
if (_controller->session().premium()) {
_controller->session().api().premium().reload();
}
_controller->session().api().premium().reload();
}
rpl::producer<QString> Main::title() {

View File

@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/gradient.h"
#include "ui/effects/premium_graphics.h"
#include "ui/text/text_utilities.h"
#include "ui/text/format_values.h"
#include "ui/widgets/gradient_round_button.h"
#include "ui/widgets/labels.h"
#include "ui/wrap/fade_wrap.h"
@ -166,6 +167,7 @@ using Order = std::vector<QString>;
}
[[nodiscard]] not_null<Ui::RpWidget*> CreateSubscribeButton(
not_null<Window::SessionController*> controller,
not_null<Ui::RpWidget*> parent,
Fn<void()> callback) {
const auto result = Ui::CreateChild<Ui::GradientButton>(
@ -177,9 +179,21 @@ using Order = std::vector<QString>;
const auto &st = st::premiumPreviewBox.button;
result->resize(parent->width(), st.height);
const auto premium = &controller->session().api().premium();
const auto computeCost = [=] {
const auto amount = premium->monthlyAmount();
const auto currency = premium->monthlyCurrency();
const auto valid = (amount > 0) && !currency.isEmpty();
return Ui::FillAmountAndCurrency(
valid ? amount : 500,
valid ? currency : "USD");
};
const auto label = Ui::CreateChild<Ui::FlatLabel>(
result,
tr::lng_premium_summary_button(tr::now, lt_cost, "$5"),
tr::lng_premium_summary_button(
lt_cost,
premium->statusTextValue() | rpl::map(computeCost)),
st::premiumPreviewButtonLabel);
label->setAttribute(Qt::WA_TransparentForMouseEvents);
rpl::combine(
@ -878,7 +892,7 @@ QPointer<Ui::RpWidget> Premium::createPinnedToBottom(
not_null<Ui::RpWidget*> parent) {
const auto content = Ui::CreateChild<Ui::RpWidget>(parent.get());
const auto button = CreateSubscribeButton(content, [=] {
const auto button = CreateSubscribeButton(_controller, content, [=] {
SendScreenAccept(_controller);
StartPremiumPayment(_controller, _ref);
});