| 613 | } |
| 614 | |
| 615 | void Boosts::requestBoosts( |
| 616 | const Data::BoostsListSlice::OffsetToken &token, |
| 617 | Fn<void(Data::BoostsListSlice)> done) { |
| 618 | if (_requestId) { |
| 619 | return; |
| 620 | } |
| 621 | constexpr auto kTlFirstSlice = tl::make_int(kFirstSlice); |
| 622 | constexpr auto kTlLimit = tl::make_int(kLimit); |
| 623 | const auto gifts = token.gifts; |
| 624 | _requestId = _api.request(MTPpremium_GetBoostsList( |
| 625 | gifts |
| 626 | ? MTP_flags(MTPpremium_GetBoostsList::Flag::f_gifts) |
| 627 | : MTP_flags(0), |
| 628 | _peer->input(), |
| 629 | MTP_string(token.next), |
| 630 | token.next.isEmpty() ? kTlFirstSlice : kTlLimit |
| 631 | )).done([=](const MTPpremium_BoostsList &result) { |
| 632 | _requestId = 0; |
| 633 | |
| 634 | const auto &data = result.data(); |
| 635 | _peer->owner().processUsers(data.vusers()); |
| 636 | |
| 637 | auto list = std::vector<Data::Boost>(); |
| 638 | list.reserve(data.vboosts().v.size()); |
| 639 | constexpr auto kMonthsDivider = int(30 * 86400); |
| 640 | for (const auto &boost : data.vboosts().v) { |
| 641 | const auto &data = boost.data(); |
| 642 | const auto path = data.vused_gift_slug() |
| 643 | ? (u"giftcode/"_q + qs(data.vused_gift_slug()->v)) |
| 644 | : QString(); |
| 645 | auto giftCodeLink = !path.isEmpty() |
| 646 | ? Data::GiftCodeLink{ |
| 647 | _peer->session().createInternalLink(path), |
| 648 | _peer->session().createInternalLinkFull(path), |
| 649 | qs(data.vused_gift_slug()->v), |
| 650 | } |
| 651 | : Data::GiftCodeLink(); |
| 652 | list.push_back({ |
| 653 | .id = qs(data.vid()), |
| 654 | .userId = UserId(data.vuser_id().value_or_empty()), |
| 655 | .giveawayMessage = data.vgiveaway_msg_id() |
| 656 | ? FullMsgId{ _peer->id, data.vgiveaway_msg_id()->v } |
| 657 | : FullMsgId(), |
| 658 | .date = base::unixtime::parse(data.vdate().v), |
| 659 | .expiresAt = base::unixtime::parse(data.vexpires().v), |
| 660 | .expiresAfterMonths = ((data.vexpires().v - data.vdate().v) |
| 661 | / kMonthsDivider), |
| 662 | .giftCodeLink = std::move(giftCodeLink), |
| 663 | .multiplier = data.vmultiplier().value_or_empty(), |
| 664 | .credits = data.vstars().value_or_empty(), |
| 665 | .isGift = data.is_gift(), |
| 666 | .isGiveaway = data.is_giveaway(), |
| 667 | .isUnclaimed = data.is_unclaimed(), |
| 668 | }); |
| 669 | } |
| 670 | done(Data::BoostsListSlice{ |
| 671 | .list = std::move(list), |
| 672 | .multipliedTotal = data.vcount().v, |
no test coverage detected