1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-12-04 05:02:41 +03:00

Share room state events with thread's timelines

This commit is contained in:
Germain Souquet
2021-09-22 11:19:08 +01:00
parent b1d239b292
commit 1359c0574e
3 changed files with 30 additions and 8 deletions

View File

@@ -27,6 +27,7 @@ import { Relations } from './relations';
import { Room } from "./room";
import { Filter } from "../filter";
import { EventType, RelationType } from "../@types/event";
import { RoomState } from "./room-state";
// var DEBUG = false;
const DEBUG = true;
@@ -45,6 +46,11 @@ interface IOpts {
unstableClientRelationAggregation?: boolean;
}
export enum DuplicateStrategy {
Ignore = "ignore",
Replace = "replace",
}
export class EventTimelineSet extends EventEmitter {
private readonly timelineSupport: boolean;
private unstableClientRelationAggregation: boolean;
@@ -509,8 +515,14 @@ export class EventTimelineSet extends EventEmitter {
* @param {MatrixEvent} event Event to be added
* @param {string?} duplicateStrategy 'ignore' or 'replace'
* @param {boolean} fromCache whether the sync response came from cache
* @param {boolean} fromCache whether the sync response came from cache
*/
public addLiveEvent(event: MatrixEvent, duplicateStrategy?: "ignore" | "replace", fromCache = false): void {
public addLiveEvent(
event: MatrixEvent,
duplicateStrategy: DuplicateStrategy = DuplicateStrategy.Ignore,
fromCache = false,
roomState?: RoomState,
): void {
if (this.filter) {
const events = this.filter.filterRoomTimeline([event]);
if (!events.length) {
@@ -527,9 +539,12 @@ export class EventTimelineSet extends EventEmitter {
for (let j = 0; j < tlEvents.length; j++) {
if (tlEvents[j].getId() === event.getId()) {
// still need to set the right metadata on this event
if (!roomState) {
timeline.getState(EventTimeline.FORWARDS);
}
EventTimeline.setEventMetadata(
event,
timeline.getState(EventTimeline.FORWARDS),
roomState,
false,
);
tlEvents[j] = event;
@@ -545,7 +560,7 @@ export class EventTimelineSet extends EventEmitter {
return;
}
this.addEventToTimeline(event, this.liveTimeline, false, fromCache);
this.addEventToTimeline(event, this.liveTimeline, false, fromCache, roomState);
}
/**
@@ -566,9 +581,10 @@ export class EventTimelineSet extends EventEmitter {
timeline: EventTimeline,
toStartOfTimeline: boolean,
fromCache = false,
roomState?: RoomState,
) {
const eventId = event.getId();
timeline.addEvent(event, toStartOfTimeline);
timeline.addEvent(event, toStartOfTimeline, roomState);
this._eventIdToTimeline[eventId] = timeline;
this.setRelationsTarget(event);

View File

@@ -347,8 +347,11 @@ export class EventTimeline {
* @param {MatrixEvent} event new event
* @param {boolean} atStart true to insert new event at the start
*/
public addEvent(event: MatrixEvent, atStart: boolean): void {
const stateContext = atStart ? this.startState : this.endState;
public addEvent(event: MatrixEvent, atStart: boolean, stateContext?: RoomState): void {
if (!stateContext) {
stateContext = atStart ? this.startState : this.endState;
}
const timelineSet = this.getTimelineSet();
if (timelineSet.room) {

View File

@@ -17,7 +17,8 @@ limitations under the License.
import { EventEmitter } from "events";
import { MatrixClient } from "../matrix";
import { MatrixEvent } from "./event";
import { EventTimelineSet } from './event-timeline-set';
import { EventTimeline } from "./event-timeline";
import { EventTimelineSet, DuplicateStrategy } from './event-timeline-set';
import { Room } from './room';
export enum ThreadEvent {
@@ -72,8 +73,10 @@ export class Thread extends EventEmitter {
this.root = event.getId();
}
const roomState = this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);
event.setThread(this);
this.timelineSet.addLiveEvent(event);
this.timelineSet.addLiveEvent(event, DuplicateStrategy.Ignore, false, roomState);
if (this.ready) {
this.client.decryptEventIfNeeded(event, {});