MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / requestFileReference

Method requestFileReference

Telegram/SourceFiles/apiwrap.cpp:2538–2588  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2536
2537template <typename Request>
2538void ApiWrap::requestFileReference(
2539 Data::FileOrigin origin,
2540 FileReferencesHandler &&handler,
2541 Request &&data) {
2542 const auto i = _fileReferenceHandlers.find(origin);
2543 if (i != end(_fileReferenceHandlers)) {
2544 i->second.push_back(std::move(handler));
2545 return;
2546 }
2547 auto handlers = std::vector<FileReferencesHandler>();
2548 handlers.push_back(std::move(handler));
2549 _fileReferenceHandlers.emplace(origin, std::move(handlers));
2550
2551 request(std::move(data)).done([=](const auto &result) {
2552 const auto parsed = Data::GetFileReferences(result);
2553 for (const auto &p : parsed.data) {
2554 // Unpack here the parsed pair by hand to workaround a GCC bug.
2555 // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87122
2556 const auto &origin = p.first;
2557 const auto &reference = p.second;
2558 const auto documentId = std::get_if<DocumentFileLocationId>(
2559 &origin);
2560 if (documentId) {
2561 _session->data().document(
2562 documentId->id
2563 )->refreshFileReference(reference);
2564 }
2565 const auto photoId = std::get_if<PhotoFileLocationId>(&origin);
2566 if (photoId) {
2567 _session->data().photo(
2568 photoId->id
2569 )->refreshFileReference(reference);
2570 }
2571 }
2572 const auto i = _fileReferenceHandlers.find(origin);
2573 Assert(i != end(_fileReferenceHandlers));
2574 auto handlers = std::move(i->second);
2575 _fileReferenceHandlers.erase(i);
2576 for (auto &handler : handlers) {
2577 handler(parsed);
2578 }
2579 }).fail([=] {
2580 const auto i = _fileReferenceHandlers.find(origin);
2581 Assert(i != end(_fileReferenceHandlers));
2582 auto handlers = std::move(i->second);
2583 _fileReferenceHandlers.erase(i);
2584 for (auto &handler : handlers) {
2585 handler(UpdatedFileReferences());
2586 }
2587 }).send();
2588}
2589
2590void ApiWrap::refreshFileReference(
2591 Data::FileOrigin origin,

Callers

nothing calls this directly

Calls 12

GetFileReferencesFunction · 0.85
emplaceMethod · 0.80
findMethod · 0.45
sendMethod · 0.45
failMethod · 0.45
doneMethod · 0.45
refreshFileReferenceMethod · 0.45
documentMethod · 0.45
dataMethod · 0.45
photoMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected