From 33e9eb371eaa026ec34c09d8e48cc265efaa6fe9 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 16 May 2019 14:35:50 +0100 Subject: [PATCH] use relation handling in timelineset for replacements --- src/models/event-timeline-set.js | 7 ++++++- src/models/room.js | 19 ------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/models/event-timeline-set.js b/src/models/event-timeline-set.js index e2fad2afc..055ed5c4b 100644 --- a/src/models/event-timeline-set.js +++ b/src/models/event-timeline-set.js @@ -747,19 +747,24 @@ EventTimelineSet.prototype.aggregateRelations = function(event) { relationsWithRelType = relationsForEvent[relationType] = {}; } let relationsWithEventType = relationsWithRelType[eventType]; + const relatesToEvent = this.findEventById(relatesToEventId); if (!relationsWithEventType) { relationsWithEventType = relationsWithRelType[eventType] = new Relations( relationType, eventType, this.room, ); - const relatesToEvent = this.findEventById(relatesToEventId); if (relatesToEvent) { relatesToEvent.emit("Event.relationsCreated", relationType, eventType); } } relationsWithEventType.addEvent(event, relatesToEvent); + + if (relationType === "m.replace" && relatesToEvent) { + const replacement = relationsWithEventType.getLastReplacement(); + relatesToEvent.makeReplaced(replacement); + } }; /** diff --git a/src/models/room.js b/src/models/room.js index f8d7bdc69..4f488dab1 100644 --- a/src/models/room.js +++ b/src/models/room.js @@ -1032,25 +1032,6 @@ Room.prototype._addLiveEvent = function(event, duplicateStrategy) { // this may be needed to trigger an update. } - - if (this._opts.unstableClientRelationReplacements && event.isRelation("m.replace")) { - const relatesTo = event.getRelation(); - const replacedId = relatesTo && relatesTo.event_id; - const replacedEvent = this.getUnfilteredTimelineSet().findEventById(replacedId); - if (replacedEvent && event.getSender() === replacedEvent.getSender()) { - const doAndEmitReplacement = () => { - replacedEvent.makeReplaced(event); - this.emit("Room.replaceEvent", replacedEvent, this); - }; - - if (event.isBeingDecrypted()) { - event.once("Event.decrypted", doAndEmitReplacement); - } else { - doAndEmitReplacement(); - } - } - } - if (event.getUnsigned().transaction_id) { const existingEvent = this._txnToEvent[event.getUnsigned().transaction_id]; if (existingEvent) {