| 100 | } |
| 101 | |
| 102 | void MessagesSearch::searchRequest() { |
| 103 | const auto nextToken = RequestToToken(_request); |
| 104 | if (!_offsetId) { |
| 105 | const auto it = _cacheOfStartByToken.find(nextToken); |
| 106 | if (it != end(_cacheOfStartByToken)) { |
| 107 | _requestId = 0; |
| 108 | searchReceived(it->second, _requestId, nextToken); |
| 109 | return; |
| 110 | } |
| 111 | } |
| 112 | auto callback = [=](Fn<void()> finish) { |
| 113 | using Flag = MTPmessages_Search::Flag; |
| 114 | const auto from = _request.from; |
| 115 | const auto fromPeer = _history->peer->isUser() ? nullptr : from; |
| 116 | const auto savedPeer = _history->peer->isSelf() ? from : nullptr; |
| 117 | _requestId = _history->session().api().request(MTPmessages_Search( |
| 118 | MTP_flags((fromPeer ? Flag::f_from_id : Flag()) |
| 119 | | (savedPeer ? Flag::f_saved_peer_id : Flag()) |
| 120 | | (_request.topMsgId ? Flag::f_top_msg_id : Flag()) |
| 121 | | (_request.tags.empty() ? Flag() : Flag::f_saved_reaction)), |
| 122 | _history->peer->input(), |
| 123 | MTP_string(_request.query), |
| 124 | (fromPeer ? fromPeer->input() : MTP_inputPeerEmpty()), |
| 125 | (savedPeer ? savedPeer->input() : MTP_inputPeerEmpty()), |
| 126 | MTP_vector_from_range(_request.tags | ranges::views::transform( |
| 127 | Data::ReactionToMTP |
| 128 | )), |
| 129 | MTP_int(_request.topMsgId), // top_msg_id |
| 130 | PrepareFilter(_request.filter), |
| 131 | MTP_int(0), // min_date |
| 132 | MTP_int(0), // max_date |
| 133 | MTP_int(_offsetId), // offset_id |
| 134 | MTP_int(0), // add_offset |
| 135 | MTP_int(kSearchPerPage), |
| 136 | MTP_int(0), // max_id |
| 137 | MTP_int(0), // min_id |
| 138 | MTP_long(0) // hash |
| 139 | )).done([=](const TLMessages &result, mtpRequestId id) { |
| 140 | _searchInHistoryRequest = 0; |
| 141 | searchReceived(result, id, nextToken); |
| 142 | finish(); |
| 143 | }).fail([=](const MTP::Error &error, mtpRequestId id) { |
| 144 | _searchInHistoryRequest = 0; |
| 145 | |
| 146 | if (_requestId == id) { |
| 147 | _requestId = 0; |
| 148 | } |
| 149 | if (error.type() == u"SEARCH_QUERY_EMPTY"_q) { |
| 150 | _messagesFounds.fire({ 0, MessageIdsList(), nextToken }); |
| 151 | } |
| 152 | |
| 153 | finish(); |
| 154 | }).send(); |
| 155 | return _requestId; |
| 156 | }; |
| 157 | _searchInHistoryRequest = _history->owner().histories().sendRequest( |
| 158 | _history, |
| 159 | Data::Histories::RequestType::History, |
nothing calls this directly
no test coverage detected