| 662 | } |
| 663 | |
| 664 | void ApiWrap::resolveMessageDatas() { |
| 665 | if (_messageDataRequests.empty() && _channelMessageDataRequests.empty()) { |
| 666 | return; |
| 667 | } |
| 668 | |
| 669 | const auto ids = collectMessageIds(_messageDataRequests); |
| 670 | if (!ids.isEmpty()) { |
| 671 | const auto requestId = request(MTPmessages_GetMessages( |
| 672 | MTP_vector<MTPInputMessage>(ids) |
| 673 | )).done([=]( |
| 674 | const MTPmessages_Messages &result, |
| 675 | mtpRequestId requestId) { |
| 676 | _session->data().processExistingMessages(nullptr, result); |
| 677 | finalizeMessageDataRequest(nullptr, requestId); |
| 678 | }).fail([=](const MTP::Error &error, mtpRequestId requestId) { |
| 679 | finalizeMessageDataRequest(nullptr, requestId); |
| 680 | }).afterDelay(kSmallDelayMs).send(); |
| 681 | |
| 682 | for (auto &[msgId, request] : _messageDataRequests) { |
| 683 | if (request.requestId > 0) { |
| 684 | continue; |
| 685 | } |
| 686 | request.requestId = requestId; |
| 687 | } |
| 688 | } |
| 689 | for (auto j = _channelMessageDataRequests.begin(); j != _channelMessageDataRequests.cend();) { |
| 690 | if (j->second.empty()) { |
| 691 | j = _channelMessageDataRequests.erase(j); |
| 692 | continue; |
| 693 | } |
| 694 | const auto ids = collectMessageIds(j->second); |
| 695 | if (!ids.isEmpty()) { |
| 696 | const auto channel = j->first; |
| 697 | const auto requestId = request(MTPchannels_GetMessages( |
| 698 | channel->inputChannel(), |
| 699 | MTP_vector<MTPInputMessage>(ids) |
| 700 | )).done([=]( |
| 701 | const MTPmessages_Messages &result, |
| 702 | mtpRequestId requestId) { |
| 703 | _session->data().processExistingMessages(channel, result); |
| 704 | finalizeMessageDataRequest(channel, requestId); |
| 705 | }).fail([=](const MTP::Error &error, mtpRequestId requestId) { |
| 706 | finalizeMessageDataRequest(channel, requestId); |
| 707 | }).afterDelay(kSmallDelayMs).send(); |
| 708 | |
| 709 | for (auto &[msgId, request] : j->second) { |
| 710 | if (request.requestId > 0) { |
| 711 | continue; |
| 712 | } |
| 713 | request.requestId = requestId; |
| 714 | } |
| 715 | } |
| 716 | ++j; |
| 717 | } |
| 718 | } |
| 719 | |
| 720 | void ApiWrap::finalizeMessageDataRequest( |
| 721 | ChannelData *channel, |
nothing calls this directly
no test coverage detected