From e32b8a75ee024fe33622c7010ca17a414abbe0ee Mon Sep 17 00:00:00 2001 From: Germain Date: Tue, 22 Mar 2022 21:34:20 +0000 Subject: [PATCH] Lazy load thread list timeline set (#2254) --- src/models/room.ts | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/models/room.ts b/src/models/room.ts index 5d7cba5d6..3da055e6e 100644 --- a/src/models/room.ts +++ b/src/models/room.ts @@ -346,15 +346,6 @@ export class Room extends TypedEventEmitter RoomEvent.TimelineReset, ]); - if (this.client?.supportsExperimentalThreads) { - Promise.all([ - this.createThreadTimelineSet(), - this.createThreadTimelineSet(ThreadFilterType.My), - ]).then((timelineSets) => { - this.threadsTimelineSets.push(...timelineSets); - }); - } - this.fixUpLegacyTimelineFields(); if (this.opts.pendingEventOrdering === PendingEventOrdering.Detached) { @@ -381,6 +372,26 @@ export class Room extends TypedEventEmitter } } + private threadTimelineSetsPromise: Promise<[EventTimelineSet, EventTimelineSet]> | null = null; + public async createThreadsTimelineSets(): Promise<[EventTimelineSet, EventTimelineSet]> { + if (this.threadTimelineSetsPromise) { + return this.threadTimelineSetsPromise; + } + + if (this.client?.supportsExperimentalThreads) { + try { + this.threadTimelineSetsPromise = Promise.all([ + this.createThreadTimelineSet(), + this.createThreadTimelineSet(ThreadFilterType.My), + ]); + const timelineSets = await this.threadTimelineSetsPromise; + this.threadsTimelineSets.push(...timelineSets); + } catch (e) { + this.threadTimelineSetsPromise = null; + } + } + } + /** * Bulk decrypt critical events in a room *