diff --git a/Telegram/SourceFiles/api/api_statistics.cpp b/Telegram/SourceFiles/api/api_statistics.cpp index 3d3bc184c3..3069843c17 100644 --- a/Telegram/SourceFiles/api/api_statistics.cpp +++ b/Telegram/SourceFiles/api/api_statistics.cpp @@ -533,8 +533,13 @@ rpl::producer Boosts::request() { }; _boostStatus.link = qs(data.vboost_url()); - requestBoosts({}, [=](Data::BoostsListSlice &&slice) { - _boostStatus.firstSlice = std::move(slice); + using namespace Data; + requestBoosts({ .gifts = false }, [=](BoostsListSlice &&slice) { + _boostStatus.firstSliceBoosts = std::move(slice); + requestBoosts({ .gifts = true }, [=](BoostsListSlice &&s) { + _boostStatus.firstSliceGifts = std::move(s); + consumer.put_done(); + }); consumer.put_done(); }); }).fail([=](const MTP::Error &error) { @@ -553,9 +558,11 @@ void Boosts::requestBoosts( } constexpr auto kTlFirstSlice = tl::make_int(kFirstSlice); constexpr auto kTlLimit = tl::make_int(kLimit); + const auto gifts = token.gifts; _requestId = _api.request(MTPpremium_GetBoostsList( - // MTP_flags(MTPpremium_GetBoostsList::Flag::f_gifts), - MTP_flags(0), + gifts + ? MTP_flags(MTPpremium_GetBoostsList::Flag::f_gifts) + : MTP_flags(0), _peer->input, MTP_string(token.next), token.next.isEmpty() ? kTlFirstSlice : kTlLimit @@ -596,12 +603,13 @@ void Boosts::requestBoosts( } done(Data::BoostsListSlice{ .list = std::move(list), - .total = data.vcount().v, + .multipliedTotal = data.vcount().v, .allLoaded = (data.vcount().v == data.vboosts().v.size()), .token = Data::BoostsListSlice::OffsetToken{ - data.vnext_offset() + .next = data.vnext_offset() ? qs(*data.vnext_offset()) - : QString() + : QString(), + .gifts = gifts, }, }); }).fail([=] { diff --git a/Telegram/SourceFiles/data/data_boosts.h b/Telegram/SourceFiles/data/data_boosts.h index b17ca85f8c..a62c70c92e 100644 --- a/Telegram/SourceFiles/data/data_boosts.h +++ b/Telegram/SourceFiles/data/data_boosts.h @@ -42,16 +42,18 @@ struct Boost final { struct BoostsListSlice final { struct OffsetToken final { QString next; + bool gifts = false; }; std::vector list; - int total = 0; + int multipliedTotal = 0; bool allLoaded = false; OffsetToken token; }; struct BoostStatus final { BoostsOverview overview; - BoostsListSlice firstSlice; + BoostsListSlice firstSliceBoosts; + BoostsListSlice firstSliceGifts; QString link; }; diff --git a/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp b/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp index 8c9b8ab7fb..5a14a9916b 100644 --- a/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp +++ b/Telegram/SourceFiles/info/boosts/info_boosts_inner_widget.cpp @@ -271,7 +271,7 @@ void InnerWidget::fill() { ::Settings::AddDivider(inner); ::Settings::AddSkip(inner); - if (status.firstSlice.total > 0) { + if (status.firstSliceBoosts.multipliedTotal > 0) { auto boostClicked = [=](const Data::Boost &boost) { if (!boost.giftCodeLink.slug.isEmpty()) { ResolveGiftCode(_controller, boost.giftCodeLink.slug); @@ -294,10 +294,10 @@ void InnerWidget::fill() { header->setTitle(tr::lng_boosts_list_title( tr::now, lt_count, - status.firstSlice.total)); + status.firstSliceBoosts.total)); header->setSubTitle({}); Statistics::AddBoostsList( - status.firstSlice, + status.firstSliceBoosts, inner, std::move(boostClicked), _peer, diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp index e8ec14d972..93b05dc388 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp +++ b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp @@ -757,7 +757,7 @@ void AddBoostsList( BoostCallback boostClickedCallback, not_null peer, rpl::producer title) { - const auto max = firstSlice.total; + const auto max = firstSlice.multipliedTotal; struct State final { State(BoostsDescriptor d) : controller(std::move(d)) { }