diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-06-15 15:24:07 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-06-15 15:24:07 +0200 |
commit | bcc6c518be3956557a7046260c9aafc60468646d (patch) | |
tree | ce736d12e13215f99f4acd83cefc6ea2a0343d3d /src/timeline | |
parent | Speedup startup by caching last message timestamp (diff) | |
download | nheko-bcc6c518be3956557a7046260c9aafc60468646d.tar.xz |
Fix edits not updating in replies
Diffstat (limited to 'src/timeline')
-rw-r--r-- | src/timeline/EventStore.cpp | 17 |
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)) { |