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

Function UpdateUserpics

Telegram/SourceFiles/api/api_who_reacted.cpp:458–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

456}
457
458bool UpdateUserpics(
459 not_null<State*> state,
460 not_null<HistoryItem*> item,
461 const std::vector<PeerWithReaction> &ids) {
462 auto &owner = item->history()->owner();
463
464 struct ResolvedPeer {
465 PeerData *peer = nullptr;
466 TimeId date = 0;
467 bool dateReacted = false;
468 ReactionId reaction;
469 };
470 const auto peers = ranges::views::all(
471 ids
472 ) | ranges::views::transform([&](PeerWithReaction id) {
473 return ResolvedPeer{
474 .peer = owner.peerLoaded(id.peerWithDate.peer),
475 .date = id.peerWithDate.date,
476 .dateReacted = id.peerWithDate.dateReacted,
477 .reaction = id.reaction,
478 };
479 }) | ranges::views::filter([](ResolvedPeer resolved) {
480 return resolved.peer != nullptr;
481 }) | ranges::to_vector;
482
483 const auto same = [&] {
484 if (state->userpics.size() != peers.size()) {
485 return false;
486 }
487 const auto count = state->userpics.size();
488 for (auto i = size_t(); i != count; ++i) {
489 const auto &userpic = state->userpics[i];
490 const auto &resolved = peers[i];
491 if ((userpic.peer.get() != resolved.peer)
492 || (userpic.date != resolved.date)
493 || (userpic.reaction != resolved.reaction)) {
494 return false;
495 }
496 }
497 return true;
498 }();
499 if (same) {
500 return false;
501 }
502 auto &was = state->userpics;
503 auto now = std::vector<Userpic>();
504 for (const auto &resolved : peers) {
505 const auto peer = not_null{ resolved.peer };
506 const auto &data = ReactionEntityData(resolved.reaction);
507 const auto i = ranges::find(was, peer, &Userpic::peer);
508 if (i != end(was) && i->view.cloud) {
509 i->date = resolved.date;
510 i->dateReacted = resolved.dateReacted;
511 i->reaction = resolved.reaction;
512 now.push_back(std::move(*i));
513 now.back().customEntityData = data;
514 continue;
515 }

Callers 1

WhoReactedFunction · 0.85

Calls 8

ReactionEntityDataFunction · 0.85
userpicUniqueKeyMethod · 0.80
loadUserpicMethod · 0.80
ownerMethod · 0.45
historyMethod · 0.45
peerLoadedMethod · 0.45
sizeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected