| 2322 | } |
| 2323 | |
| 2324 | void ApiWrap::requestTopicMessages( |
| 2325 | PeerId peerId, |
| 2326 | MTPInputPeer inputPeer, |
| 2327 | int32 topicRootId, |
| 2328 | FnMut<bool(int count)> start, |
| 2329 | Fn<bool(DownloadProgress)> progress, |
| 2330 | Fn<bool(Data::MessagesSlice&&)> slice, |
| 2331 | FnMut<void()> done) { |
| 2332 | Expects(_topicProcess == nullptr); |
| 2333 | Expects(_selfId.has_value()); |
| 2334 | |
| 2335 | _topicProcess = std::make_unique<TopicProcess>(); |
| 2336 | _topicProcess->context.selfPeerId = peerFromUser(*_selfId); |
| 2337 | _topicProcess->peerId = peerId; |
| 2338 | _topicProcess->inputPeer = inputPeer; |
| 2339 | _topicProcess->topicRootId = topicRootId; |
| 2340 | _topicProcess->relativePath = "chats/chat_" |
| 2341 | + QString::number(peerId.value) |
| 2342 | + "/topic_" |
| 2343 | + QString::number(topicRootId) |
| 2344 | + "/"; |
| 2345 | _topicProcess->start = std::move(start); |
| 2346 | _topicProcess->fileProgress = std::move(progress); |
| 2347 | _topicProcess->handleSlice = std::move(slice); |
| 2348 | _topicProcess->done = std::move(done); |
| 2349 | |
| 2350 | mainRequest(MTPchannels_GetMessages( |
| 2351 | MTP_inputChannel( |
| 2352 | inputPeer.c_inputPeerChannel().vchannel_id(), |
| 2353 | inputPeer.c_inputPeerChannel().vaccess_hash()), |
| 2354 | MTP_vector<MTPInputMessage>( |
| 2355 | 1, |
| 2356 | MTP_inputMessageID(MTP_int(topicRootId))) |
| 2357 | )).done([=](const MTPmessages_Messages &rootResult) { |
| 2358 | Expects(_topicProcess != nullptr); |
| 2359 | |
| 2360 | auto rootSlice = rootResult.match([&]( |
| 2361 | const MTPDmessages_messagesNotModified &) { |
| 2362 | return Data::MessagesSlice(); |
| 2363 | }, [&](const auto &data) { |
| 2364 | return Data::ParseMessagesSlice( |
| 2365 | _topicProcess->context, |
| 2366 | data.vmessages(), |
| 2367 | data.vusers(), |
| 2368 | data.vchats(), |
| 2369 | _topicProcess->relativePath); |
| 2370 | }); |
| 2371 | |
| 2372 | auto rootSlicePtr = std::make_shared<Data::MessagesSlice>( |
| 2373 | std::move(rootSlice)); |
| 2374 | |
| 2375 | requestTopicReplies( |
| 2376 | 0, |
| 2377 | 0, |
| 2378 | kMessagesSliceLimit, |
| 2379 | [=](const MTPmessages_Messages &result) { |
| 2380 | Expects(_topicProcess != nullptr); |
| 2381 |
no test coverage detected