From 5164c2c5e880a18661890abd5b8c750dbf26ece4 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 22 Feb 2023 00:03:55 +0100 Subject: [PATCH] Dedup reactions --- src/timeline/EventStore.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 5d3deca0..3c214dcb 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -575,8 +575,7 @@ EventStore::reactions(const std::string &event_id) struct TempReaction { - int count = 0; - std::vector users; + std::set users; std::string reactedBySelf; }; std::map aggregation; @@ -595,14 +594,13 @@ EventStore::reactions(const std::string &event_id) auto key = reaction->content.relations.annotates()->key.value(); auto &agg = aggregation[key]; - if (agg.count == 0) { + if (agg.users.empty()) { Reaction temp{}; temp.key_ = QString::fromStdString(key); reactions.push_back(temp); } - agg.count++; - agg.users.push_back(cache::displayName(room_id_, reaction->sender)); + agg.users.insert(cache::displayName(room_id_, reaction->sender)); if (reaction->sender == self) agg.reactedBySelf = reaction->event_id; } @@ -612,7 +610,7 @@ EventStore::reactions(const std::string &event_id) temp.reserve(static_cast(reactions.size())); for (auto &reaction : reactions) { const auto &agg = aggregation[reaction.key_.toStdString()]; - reaction.count_ = agg.count; + reaction.count_ = agg.users.size(); reaction.selfReactedEvent_ = QString::fromStdString(agg.reactedBySelf); bool firstReaction = true;