You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-25 05:23:13 +03:00
use timeline set instead of an array of events
This commit is contained in:
@@ -17,18 +17,27 @@ limitations under the License.
|
||||
import { EventEmitter } from "events";
|
||||
import { MatrixClient } from "../matrix";
|
||||
import { MatrixEvent } from "./event";
|
||||
import { EventTimelineSet } from './event-timeline-set';
|
||||
import { Room } from './room';
|
||||
|
||||
export class Thread extends EventEmitter {
|
||||
private root: string;
|
||||
public tail = new Set<string>();
|
||||
private events = new Map<string, MatrixEvent>();
|
||||
private _timelineSet: EventTimelineSet;
|
||||
|
||||
private decrypted = false;
|
||||
|
||||
constructor(
|
||||
events: MatrixEvent[] = [],
|
||||
public readonly room: Room,
|
||||
public readonly client: MatrixClient,
|
||||
) {
|
||||
super();
|
||||
this._timelineSet = new EventTimelineSet(room, {
|
||||
unstableClientRelationAggregation: true,
|
||||
timelineSupport: true,
|
||||
});
|
||||
events.forEach(event => this.addEvent(event));
|
||||
}
|
||||
|
||||
@@ -38,7 +47,7 @@ export class Thread extends EventEmitter {
|
||||
* @param event The event to add
|
||||
*/
|
||||
public addEvent(event: MatrixEvent): void {
|
||||
if (this.events.has(event.getId())) {
|
||||
if (this.events.has(event.getId()) || event.status !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -51,8 +60,14 @@ export class Thread extends EventEmitter {
|
||||
this.root = event.getId();
|
||||
}
|
||||
|
||||
this.events.set(event.getId(), event);
|
||||
event.setThread(this);
|
||||
this.events.set(event.getId(), event);
|
||||
this._timelineSet.addEventToTimeline(
|
||||
event,
|
||||
this._timelineSet.getLiveTimeline(),
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
if (this.ready) {
|
||||
this.client.decryptEventIfNeeded(event, {});
|
||||
@@ -99,14 +114,6 @@ export class Thread extends EventEmitter {
|
||||
return this.rootEvent.replyEventId === undefined && this.decrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* A sorted list of events to display
|
||||
*/
|
||||
public get eventTimeline(): MatrixEvent[] {
|
||||
return Array.from(this.events.values())
|
||||
.sort((a, b) => a.getTs() - b.getTs());
|
||||
}
|
||||
|
||||
/**
|
||||
* The thread ID, which is the same as the root event ID
|
||||
*/
|
||||
@@ -122,7 +129,7 @@ export class Thread extends EventEmitter {
|
||||
* The number of messages in the thread
|
||||
*/
|
||||
public get length(): number {
|
||||
return this.eventTimeline.length;
|
||||
return this._timelineSet.getLiveTimeline().getEvents().length;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -135,4 +142,13 @@ export class Thread extends EventEmitter {
|
||||
});
|
||||
return participants;
|
||||
}
|
||||
|
||||
public get timelineSet(): EventTimelineSet {
|
||||
return this._timelineSet;
|
||||
}
|
||||
|
||||
public get replyToEvent(): MatrixEvent {
|
||||
const events = this._timelineSet.getLiveTimeline().getEvents();
|
||||
return events[events.length -1];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user