| 1336 | } |
| 1337 | |
| 1338 | void ApiWrap::requestContacts(FnMut<void(Data::ContactsList&&)> done) { |
| 1339 | Expects(_contactsProcess == nullptr); |
| 1340 | |
| 1341 | _contactsProcess = std::make_unique<ContactsProcess>(); |
| 1342 | _contactsProcess->done = std::move(done); |
| 1343 | mainRequest(MTPcontacts_GetSaved( |
| 1344 | )).done([=](const MTPVector<MTPSavedContact> &result) { |
| 1345 | _contactsProcess->result = Data::ParseContactsList(result); |
| 1346 | |
| 1347 | const auto resolve = [=](int index, const auto &resolveNext) -> void { |
| 1348 | if (index == _contactsProcess->result.list.size()) { |
| 1349 | return requestTopPeersSlice(); |
| 1350 | } |
| 1351 | const auto &contact = _contactsProcess->result.list[index]; |
| 1352 | mainRequest(MTPcontacts_ResolvePhone( |
| 1353 | MTP_string(qs(contact.phoneNumber)) |
| 1354 | )).done([=](const MTPcontacts_ResolvedPeer &result) { |
| 1355 | auto &contact = _contactsProcess->result.list[index]; |
| 1356 | contact.userId = result.data().vpeer().match([&]( |
| 1357 | const MTPDpeerUser &user) { |
| 1358 | return UserId(user.vuser_id()); |
| 1359 | }, [](const auto &) { |
| 1360 | return UserId(); |
| 1361 | }); |
| 1362 | resolveNext(index + 1, resolveNext); |
| 1363 | }).fail([=](const MTP::Error &) { |
| 1364 | resolveNext(index + 1, resolveNext); |
| 1365 | return true; |
| 1366 | }).send(); |
| 1367 | }; |
| 1368 | |
| 1369 | if (base::options::lookup<bool>("show-peer-id-below-about").value()) { |
| 1370 | resolve(0, resolve); |
| 1371 | } else { |
| 1372 | requestTopPeersSlice(); |
| 1373 | } |
| 1374 | |
| 1375 | }).send(); |
| 1376 | } |
| 1377 | |
| 1378 | void ApiWrap::requestTopPeersSlice() { |
| 1379 | Expects(_contactsProcess != nullptr); |
no test coverage detected