From 8b088da888ba11b33bdd2e3b233f1c386c0bc507 Mon Sep 17 00:00:00 2001 From: Germain Date: Tue, 11 Jan 2022 13:11:08 +0000 Subject: [PATCH] Use server capabilities to determine how to build thread list (#7470) --- src/components/structures/ThreadPanel.tsx | 44 +++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/components/structures/ThreadPanel.tsx b/src/components/structures/ThreadPanel.tsx index c17b5eb621..34ca6affdd 100644 --- a/src/components/structures/ThreadPanel.tsx +++ b/src/components/structures/ThreadPanel.tsx @@ -43,32 +43,32 @@ async function getThreadTimelineSet( room: Room, filterType = ThreadFilterType.All, ): Promise { - const myUserId = client.getUserId(); - const filter = new Filter(myUserId); + const capabilities = await client.getCapabilities(); + const serverSupportsThreads = capabilities['io.element.thread']?.enabled; - const definition: IFilterDefinition = { - "room": { - "timeline": { - [UNSTABLE_FILTER_RELATION_TYPES.name]: [RelationType.Thread], + if (serverSupportsThreads) { + const myUserId = client.getUserId(); + const filter = new Filter(myUserId); + + const definition: IFilterDefinition = { + "room": { + "timeline": { + [UNSTABLE_FILTER_RELATION_TYPES.name]: [RelationType.Thread], + }, }, - }, - }; + }; - if (filterType === ThreadFilterType.My) { - definition.room.timeline[UNSTABLE_FILTER_RELATION_SENDERS.name] = [myUserId]; - } + if (filterType === ThreadFilterType.My) { + definition.room.timeline[UNSTABLE_FILTER_RELATION_SENDERS.name] = [myUserId]; + } - filter.setDefinition(definition); - - let timelineSet; - - try { + filter.setDefinition(definition); const filterId = await client.getOrCreateFilter( `THREAD_PANEL_${room.roomId}_${filterType}`, filter, ); filter.filterId = filterId; - timelineSet = room.getOrCreateFilteredTimelineSet( + const timelineSet = room.getOrCreateFilteredTimelineSet( filter, { prepopulateTimeline: false }, ); @@ -78,20 +78,20 @@ async function getThreadTimelineSet( timelineSet.getLiveTimeline(), { backwards: true, limit: 20 }, ); - } catch (e) { + return timelineSet; + } else { // Filter creation fails if HomeServer does not support the new relation // filter fields. We fallback to the threads that have been discovered in // the main timeline - timelineSet = new EventTimelineSet(room, {}); + const timelineSet = new EventTimelineSet(room, {}); for (const [, thread] of room.threads) { const isOwnEvent = thread.rootEvent.getSender() === client.getUserId(); if (filterType !== ThreadFilterType.My || isOwnEvent) { - timelineSet.getLiveTimeline().addEvent(thread.rootEvent); + timelineSet.getLiveTimeline().addEvent(thread.rootEvent, false); } } + return timelineSet; } - - return timelineSet; } interface IProps {