Dedup reactions

This commit is contained in:
Nicolas Werner 2023-02-22 00:03:55 +01:00
parent 96f791daf1
commit 5164c2c5e8
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9

View file

@ -575,8 +575,7 @@ EventStore::reactions(const std::string &event_id)
struct TempReaction struct TempReaction
{ {
int count = 0; std::set<std::string> users;
std::vector<std::string> users;
std::string reactedBySelf; std::string reactedBySelf;
}; };
std::map<std::string, TempReaction> aggregation; std::map<std::string, TempReaction> aggregation;
@ -595,14 +594,13 @@ EventStore::reactions(const std::string &event_id)
auto key = reaction->content.relations.annotates()->key.value(); auto key = reaction->content.relations.annotates()->key.value();
auto &agg = aggregation[key]; auto &agg = aggregation[key];
if (agg.count == 0) { if (agg.users.empty()) {
Reaction temp{}; Reaction temp{};
temp.key_ = QString::fromStdString(key); temp.key_ = QString::fromStdString(key);
reactions.push_back(temp); reactions.push_back(temp);
} }
agg.count++; agg.users.insert(cache::displayName(room_id_, reaction->sender));
agg.users.push_back(cache::displayName(room_id_, reaction->sender));
if (reaction->sender == self) if (reaction->sender == self)
agg.reactedBySelf = reaction->event_id; agg.reactedBySelf = reaction->event_id;
} }
@ -612,7 +610,7 @@ EventStore::reactions(const std::string &event_id)
temp.reserve(static_cast<int>(reactions.size())); temp.reserve(static_cast<int>(reactions.size()));
for (auto &reaction : reactions) { for (auto &reaction : reactions) {
const auto &agg = aggregation[reaction.key_.toStdString()]; const auto &agg = aggregation[reaction.key_.toStdString()];
reaction.count_ = agg.count; reaction.count_ = agg.users.size();
reaction.selfReactedEvent_ = QString::fromStdString(agg.reactedBySelf); reaction.selfReactedEvent_ = QString::fromStdString(agg.reactedBySelf);
bool firstReaction = true; bool firstReaction = true;