From 19d386f9777276af4fa5d5c50c959d6396858a15 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 3 Sep 2024 21:20:30 +0300 Subject: [PATCH] Added support of credits to giveaway info results. --- Telegram/Resources/langs/lang.strings | 3 + Telegram/SourceFiles/api/api_premium.cpp | 1 + Telegram/SourceFiles/api/api_premium.h | 1 + .../SourceFiles/boxes/gift_premium_box.cpp | 57 +++++++++++++++---- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 7bf546470..795d18847 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2922,6 +2922,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_prizes_how_yes_joined_one" = "You are participating in this giveaway, because you have joined {channel}."; "lng_prizes_how_yes_joined_many" = "You are participating in this giveaway, because you have joined {channel} (and other listed groups and channels)."; "lng_prizes_you_won" = "You won a prize in this giveaway {cup}"; +"lng_prizes_you_won_credits" = "You won {amount} in this giveaway {cup}"; +"lng_prizes_you_won_credits_amount#one" = "{count} Star"; +"lng_prizes_you_won_credits_amount#other" = "{count} Stars"; "lng_prizes_view_prize" = "View my prize"; "lng_prizes_you_didnt" = "You didn't win a prize in this giveaway."; "lng_prizes_cancelled" = "The channel cancelled the prizes by reversing the payment for them."; diff --git a/Telegram/SourceFiles/api/api_premium.cpp b/Telegram/SourceFiles/api/api_premium.cpp index c13565bae..0cd7a308b 100644 --- a/Telegram/SourceFiles/api/api_premium.cpp +++ b/Telegram/SourceFiles/api/api_premium.cpp @@ -364,6 +364,7 @@ void Premium::resolveGiveawayInfo( info.activatedCount = data.vactivated_count().value_or_empty(); info.finishDate = data.vfinish_date().v; info.startDate = data.vstart_date().v; + info.credits = data.vstars_prize().value_or_empty(); }); _giveawayInfoDone(std::move(info)); }).fail([=] { diff --git a/Telegram/SourceFiles/api/api_premium.h b/Telegram/SourceFiles/api/api_premium.h index e05ddfaf7..d78811ceb 100644 --- a/Telegram/SourceFiles/api/api_premium.h +++ b/Telegram/SourceFiles/api/api_premium.h @@ -57,6 +57,7 @@ struct GiveawayInfo { TimeId tooEarlyDate = 0; TimeId finishDate = 0; TimeId startDate = 0; + uint64 credits = 0; int winnersCount = 0; int activatedCount = 0; bool participating = false; diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index 5dd160e38..f736cd3ed 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -1419,21 +1419,56 @@ void GiveawayInfoBox( : !start->channels.empty() ? start->channels.front()->name() : u"channel"_q; - auto text = TextWithEntities(); - if (!info.giftCode.isEmpty()) { - text.append("\n\n"); - text.append(Ui::Text::Bold(tr::lng_prizes_you_won( - tr::now, + auto resultText = (!info.giftCode.isEmpty()) + ? tr::lng_prizes_you_won( lt_cup, - QString::fromUtf8("\xf0\x9f\x8f\x86")))); - text.append("\n\n"); - } else if (info.state == State::Finished) { - text.append("\n\n"); - text.append(Ui::Text::Bold(tr::lng_prizes_you_didnt(tr::now))); - text.append("\n\n"); + rpl::single( + TextWithEntities{ QString::fromUtf8("\xf0\x9f\x8f\x86") }), + Ui::Text::WithEntities) + : (info.credits) + ? tr::lng_prizes_you_won_credits( + lt_amount, + tr::lng_prizes_you_won_credits_amount( + lt_count, + rpl::single(float64(info.credits)), + Ui::Text::Bold), + lt_cup, + rpl::single( + TextWithEntities{ QString::fromUtf8("\xf0\x9f\x8f\x86") }), + Ui::Text::WithEntities) + : (info.state == State::Finished) + ? tr::lng_prizes_you_didnt(Ui::Text::WithEntities) + : (rpl::producer)(nullptr); + + if (resultText) { + const auto &st = st::changePhoneDescription; + const auto skip = st.style.font->height * 0.5; + auto label = object_ptr( + box.get(), + std::move(resultText), + st); + if ((!info.giftCode.isEmpty()) || info.credits) { + label->setTextColorOverride(st::windowActiveTextFg->c); + } + const auto result = box->addRow( + object_ptr>>( + box.get(), + object_ptr>( + box.get(), + std::move(label)), + QMargins(0, skip, 0, skip))); + result->paintRequest() | rpl::start_with_next([=] { + auto p = QPainter(result); + p.setPen(Qt::NoPen); + p.setBrush(st::boxDividerBg); + p.drawRoundedRect(result->rect(), st::boxRadius, st::boxRadius); + }, result->lifetime()); + Ui::AddSkip(box->verticalLayout()); } + auto text = TextWithEntities(); + const auto quantity = start ? start->quantity : (results->winnersCount + results->unclaimedCount);