You've already forked matrix-js-sdk
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:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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, {});
|
||||
|
||||
Reference in New Issue
Block a user