diff --git a/Telegram/SourceFiles/api/api_statistics.cpp b/Telegram/SourceFiles/api/api_statistics.cpp index c3286f667c..1231a93037 100644 --- a/Telegram/SourceFiles/api/api_statistics.cpp +++ b/Telegram/SourceFiles/api/api_statistics.cpp @@ -567,9 +567,30 @@ void Boosts::requestBoosts( auto list = std::vector(); list.reserve(data.vboosts().v.size()); for (const auto &boost : data.vboosts().v) { + const auto &data = boost.data(); + const auto path = data.vused_gift_slug() + ? (u"giftcode/"_q + qs(data.vused_gift_slug()->v)) + : QString(); + auto giftCodeLink = !path.isEmpty() + ? Data::GiftCodeLink{ + _peer->session().createInternalLink(path), + _peer->session().createInternalLinkFull(path), + qs(data.vused_gift_slug()->v), + } + : Data::GiftCodeLink(); list.push_back({ - boost.data().vuser_id().value_or_empty(), - QDateTime::fromSecsSinceEpoch(boost.data().vexpires().v), + data.is_gift(), + data.is_giveaway(), + data.is_unclaimed(), + qs(data.vid()), + data.vuser_id().value_or_empty(), + data.vgiveaway_msg_id() + ? FullMsgId{ _peer->id, data.vgiveaway_msg_id()->v } + : FullMsgId(), + QDateTime::fromSecsSinceEpoch(data.vdate().v), + data.vexpires().v, + std::move(giftCodeLink), + data.vmultiplier().value_or_empty(), }); } done(Data::BoostsListSlice{ diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index 84ea6a429a..7de1b91cc8 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/unixtime.h" #include "base/weak_ptr.h" #include "boxes/peers/prepare_short_info_box.h" +#include "data/data_boosts.h" #include "data/data_changes.h" #include "data/data_channel.h" #include "data/data_media_types.h" // Data::Giveaway @@ -237,11 +238,7 @@ void GiftBox( }, box->lifetime()); } -struct GiftCodeLink { - QString text; - QString link; -}; -[[nodiscard]] GiftCodeLink MakeGiftCodeLink( +[[nodiscard]] Data::GiftCodeLink MakeGiftCodeLink( not_null session, const QString &slug) { const auto path = u"giftcode/"_q + slug; diff --git a/Telegram/SourceFiles/data/data_boosts.h b/Telegram/SourceFiles/data/data_boosts.h index 6ad2531696..b17ca85f8c 100644 --- a/Telegram/SourceFiles/data/data_boosts.h +++ b/Telegram/SourceFiles/data/data_boosts.h @@ -19,9 +19,24 @@ struct BoostsOverview final { float64 premiumMemberPercentage = 0; }; +struct GiftCodeLink final { + QString text; + QString link; + QString slug; +}; + struct Boost final { + bool isGift = false; + bool isGiveaway = false; + bool isUnclaimed = false; + + QString id; UserId userId = UserId(0); - QDateTime expirationDate; + FullMsgId giveawayMessage; + QDateTime date; + crl::time expiresAt = 0; + GiftCodeLink giftCodeLink; + int multiplier = 0; }; struct BoostsListSlice final { diff --git a/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp b/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp index 7528c093be..89dc030811 100644 --- a/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp +++ b/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp @@ -100,8 +100,9 @@ void FillOverview( const auto topLeftLabel = addPrimary(stats.level); const auto topRightLabel = addPrimary(stats.premiumMemberCount); const auto bottomLeftLabel = addPrimary(stats.boostCount); - const auto bottomRightLabel = addPrimary( - stats.nextLevelBoostCount - stats.boostCount); + const auto bottomRightLabel = addPrimary(std::max( + stats.nextLevelBoostCount - stats.boostCount, + 0)); addSub( topLeftLabel, diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp index db764dff6b..89aadcf660 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp +++ b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp @@ -397,7 +397,7 @@ void BoostsController::applySlice(const Data::BoostsListSlice &slice) { row->setCustomStatus(tr::lng_boosts_list_status( tr::now, lt_date, - QLocale().toString(item.expirationDate, formatter))); + QLocale().toString(item.date, formatter))); delegate()->peerListAppendRow(std::move(row)); } delegate()->peerListRefreshRows();