1 files changed, 16 insertions, 1 deletions
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index 79bd028a..264cde77 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -384,6 +384,7 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
for (const auto &event : events.events) {
std::set<std::string> relates_to;
+ std::string edited_event;
if (auto redaction =
std::get_if<mtx::events::RedactionEvent<mtx::events::msg::Redaction>>(&event)) {
// fixup reactions
@@ -402,8 +403,12 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
relates_to.insert(redaction->redacts);
} else {
- for (const auto &r : mtx::accessors::relations(event).relations)
+ for (const auto &r : mtx::accessors::relations(event).relations) {
relates_to.insert(r.event_id);
+
+ if (r.rel_type == mtx::common::RelationType::Replace)
+ edited_event = r.event_id;
+ }
}
for (const auto &relates_to_id : relates_to) {
@@ -425,6 +430,16 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
}
}
+ if (!edited_event.empty()) {
+ for (const auto &downstream_event :
+ cache::client()->relatedEvents(room_id_, edited_event)) {
+ auto idx = cache::client()->getTimelineIndex(room_id_, downstream_event);
+ if (idx) {
+ emit dataChanged(toExternalIdx(*idx), toExternalIdx(*idx));
+ }
+ }
+ }
+
// decrypting and checking some encrypted messages
if (auto encrypted =
std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
|