Fix local echo for reactions

This commit is contained in:
Nicolas Werner 2020-05-16 22:48:43 +02:00
parent a75d7f00bc
commit f0757a6426

View file

@ -154,13 +154,25 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
connect(this, &TimelineModel::messageSent, this, [this](QString txn_id, QString event_id) { connect(this, &TimelineModel::messageSent, this, [this](QString txn_id, QString event_id) {
pending.removeOne(txn_id); pending.removeOne(txn_id);
auto ev = events.value(txn_id);
if (auto reaction =
std::get_if<mtx::events::RoomEvent<mtx::events::msg::Reaction>>(&ev)) {
QString reactedTo =
QString::fromStdString(reaction->content.relates_to.event_id);
auto &rModel = reactions[reactedTo];
rModel.removeReaction(*reaction);
auto rCopy = *reaction;
rCopy.event_id = event_id.toStdString();
rModel.addReaction(room_id_.toStdString(), rCopy);
}
int idx = idToIndex(txn_id); int idx = idToIndex(txn_id);
if (idx < 0) { if (idx < 0) {
// transaction already received via sync // transaction already received via sync
return; return;
} }
eventOrder[idx] = event_id; eventOrder[idx] = event_id;
auto ev = events.value(txn_id);
ev = std::visit( ev = std::visit(
[event_id](const auto &e) -> mtx::events::collections::TimelineEvents { [event_id](const auto &e) -> mtx::events::collections::TimelineEvents {
auto eventCopy = e; auto eventCopy = e;
@ -665,6 +677,14 @@ TimelineModel::internalAddEvents(
QString reactedTo = QString reactedTo =
QString::fromStdString(reaction->content.relates_to.event_id); QString::fromStdString(reaction->content.relates_to.event_id);
events.insert(id, e); events.insert(id, e);
// remove local echo
if (!txid.isEmpty()) {
auto rCopy = *reaction;
rCopy.event_id = txid.toStdString();
reactions[reactedTo].removeReaction(rCopy);
}
reactions[reactedTo].addReaction(room_id_.toStdString(), *reaction); reactions[reactedTo].addReaction(room_id_.toStdString(), *reaction);
int idx = idToIndex(reactedTo); int idx = idToIndex(reactedTo);
if (idx >= 0) if (idx >= 0)