From f506882bf826f00562d090464507077e22bb3a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 2 Jul 2021 09:47:47 +0200 Subject: [PATCH 1/4] Call setEventMetadata() for filtered timelineSets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/models/event-timeline.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/models/event-timeline.js b/src/models/event-timeline.js index 288659611..6debc0db9 100644 --- a/src/models/event-timeline.js +++ b/src/models/event-timeline.js @@ -299,15 +299,16 @@ EventTimeline.prototype.setNeighbouringTimeline = function(neighbour, direction) */ EventTimeline.prototype.addEvent = function(event, atStart) { const stateContext = atStart ? this._startState : this._endState; - - // only call setEventMetadata on the unfiltered timelineSets const timelineSet = this.getTimelineSet(); - if (timelineSet.room && - timelineSet.room.getUnfilteredTimelineSet() === timelineSet) { + + if (timelineSet.room) { EventTimeline.setEventMetadata(event, stateContext, atStart); - // modify state - if (event.isState()) { + // modify state but only on unfiltered timelineSets + if ( + event.isState() && + timelineSet.room.getUnfilteredTimelineSet() === timelineSet + ) { stateContext.setStateEvents([event]); // it is possible that the act of setting the state event means we // can set more metadata (specifically sender/target props), so try @@ -347,15 +348,16 @@ EventTimeline.prototype.addEvent = function(event, atStart) { * @param {bool} toStartOfTimeline if true the event's forwardLooking flag is set false */ EventTimeline.setEventMetadata = function(event, stateContext, toStartOfTimeline) { - // set sender and target properties - event.sender = stateContext.getSentinelMember( - event.getSender(), - ); - if (event.getType() === "m.room.member") { - event.target = stateContext.getSentinelMember( - event.getStateKey(), - ); + // We always check if the event doesn't already have the property. We do + // this to avoid overriding non-sentinel members by sentinel ones when + // adding the event to a filtered timeline + if (!event.sender) { + event.sender = stateContext.getSentinelMember(event.getSender()); } + if (!event.target && event.getType() === "m.room.member") { + event.target = stateContext.getSentinelMember(event.getStateKey()); + } + if (event.isState()) { // room state has no concept of 'old' or 'current', but we want the // room state to regress back to previous values if toStartOfTimeline From d9d19fdc63fe8da711ee7cfdba8f2ce575ba3adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 2 Jul 2021 09:51:26 +0200 Subject: [PATCH 2/4] delint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/models/event-timeline.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/event-timeline.js b/src/models/event-timeline.js index 6debc0db9..c166fc6f4 100644 --- a/src/models/event-timeline.js +++ b/src/models/event-timeline.js @@ -306,7 +306,7 @@ EventTimeline.prototype.addEvent = function(event, atStart) { // modify state but only on unfiltered timelineSets if ( - event.isState() && + event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet ) { stateContext.setStateEvents([event]); From aad33bd1b73e68685b84526873128f1f5f3be84c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 2 Jul 2021 11:04:54 +0200 Subject: [PATCH 3/4] Formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/models/event-timeline.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/event-timeline.ts b/src/models/event-timeline.ts index 12abd55e4..b5bb83db7 100644 --- a/src/models/event-timeline.ts +++ b/src/models/event-timeline.ts @@ -354,7 +354,7 @@ export class EventTimeline { // modify state but only on unfiltered timelineSets if ( event.isState() && - timelineSet.room.getUnfilteredTimelineSet() === timelineSet + timelineSet.room.getUnfilteredTimelineSet() === timelineSet ) { stateContext.setStateEvents([event]); // it is possible that the act of setting the state event means we From 67189ad323488c88087a57c3fd000f1c092482b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sun, 11 Jul 2021 10:47:42 +0200 Subject: [PATCH 4/4] Use an enum MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/models/event-timeline.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/models/event-timeline.ts b/src/models/event-timeline.ts index b5bb83db7..c89da5c0b 100644 --- a/src/models/event-timeline.ts +++ b/src/models/event-timeline.ts @@ -22,6 +22,7 @@ import { RoomState } from "./room-state"; import { EventTimelineSet } from "./event-timeline-set"; import { MatrixEvent } from "./event"; import { Filter } from "../filter"; +import { EventType } from "../@types/event"; export enum Direction { Backward = "b", @@ -55,7 +56,7 @@ export class EventTimeline { if (!event.sender) { event.sender = stateContext.getSentinelMember(event.getSender()); } - if (!event.target && event.getType() === "m.room.member") { + if (!event.target && event.getType() === EventType.RoomMember) { event.target = stateContext.getSentinelMember(event.getStateKey()); }