| 745 | } |
| 746 | |
| 747 | void EarnStatistics::requestHistory( |
| 748 | const Data::EarnHistorySlice::OffsetToken &token, |
| 749 | Fn<void(Data::EarnHistorySlice)> done) { |
| 750 | if (_requestId) { |
| 751 | return; |
| 752 | } |
| 753 | |
| 754 | constexpr auto kTlFirstSlice = tl::make_int(kFirstSlice); |
| 755 | constexpr auto kTlLimit = tl::make_int(kLimit); |
| 756 | |
| 757 | _requestId = api().request(MTPpayments_GetStarsTransactions( |
| 758 | MTP_flags(MTPpayments_getStarsTransactions::Flag::f_ton), |
| 759 | MTP_string(), // Subscription ID. |
| 760 | (_isUser ? user()->input() : channel()->input()), |
| 761 | MTP_string(token), |
| 762 | token.isEmpty() ? kTlFirstSlice : kTlLimit |
| 763 | )).done([=](const MTPpayments_StarsStatus &result) { |
| 764 | _requestId = 0; |
| 765 | |
| 766 | const auto nextToken = result.data().vnext_offset().value_or_empty(); |
| 767 | |
| 768 | const auto tlTransactions |
| 769 | = result.data().vhistory().value_or_empty(); |
| 770 | |
| 771 | const auto peer = _isUser ? (PeerData*)user() : (PeerData*)channel(); |
| 772 | auto list = ranges::views::all( |
| 773 | tlTransactions |
| 774 | ) | ranges::views::transform([=](const auto &d) { |
| 775 | return CreditsHistoryEntryFromTL(d, peer); |
| 776 | }) | ranges::to_vector; |
| 777 | done(Data::EarnHistorySlice{ |
| 778 | .list = std::move(list), |
| 779 | .total = int(tlTransactions.size()), |
| 780 | // .total = result.data().vcount().v, |
| 781 | .allLoaded = nextToken.isEmpty(), |
| 782 | .token = Data::EarnHistorySlice::OffsetToken(nextToken), |
| 783 | }); |
| 784 | }).fail([=] { |
| 785 | done({}); |
| 786 | _requestId = 0; |
| 787 | }).send(); |
| 788 | } |
| 789 | |
| 790 | Data::EarnStatistics EarnStatistics::data() const { |
| 791 | return _data; |
no test coverage detected