1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-12-16 08:02:25 +03:00

Use server capabilities to determine how to build thread list (#7470)

This commit is contained in:
Germain
2022-01-11 13:11:08 +00:00
committed by GitHub
parent df6edb0ba7
commit 8b088da888

View File

@@ -43,6 +43,10 @@ async function getThreadTimelineSet(
room: Room, room: Room,
filterType = ThreadFilterType.All, filterType = ThreadFilterType.All,
): Promise<EventTimelineSet> { ): Promise<EventTimelineSet> {
const capabilities = await client.getCapabilities();
const serverSupportsThreads = capabilities['io.element.thread']?.enabled;
if (serverSupportsThreads) {
const myUserId = client.getUserId(); const myUserId = client.getUserId();
const filter = new Filter(myUserId); const filter = new Filter(myUserId);
@@ -59,16 +63,12 @@ async function getThreadTimelineSet(
} }
filter.setDefinition(definition); filter.setDefinition(definition);
let timelineSet;
try {
const filterId = await client.getOrCreateFilter( const filterId = await client.getOrCreateFilter(
`THREAD_PANEL_${room.roomId}_${filterType}`, `THREAD_PANEL_${room.roomId}_${filterType}`,
filter, filter,
); );
filter.filterId = filterId; filter.filterId = filterId;
timelineSet = room.getOrCreateFilteredTimelineSet( const timelineSet = room.getOrCreateFilteredTimelineSet(
filter, filter,
{ prepopulateTimeline: false }, { prepopulateTimeline: false },
); );
@@ -78,20 +78,20 @@ async function getThreadTimelineSet(
timelineSet.getLiveTimeline(), timelineSet.getLiveTimeline(),
{ backwards: true, limit: 20 }, { backwards: true, limit: 20 },
); );
} catch (e) { return timelineSet;
} else {
// Filter creation fails if HomeServer does not support the new relation // Filter creation fails if HomeServer does not support the new relation
// filter fields. We fallback to the threads that have been discovered in // filter fields. We fallback to the threads that have been discovered in
// the main timeline // the main timeline
timelineSet = new EventTimelineSet(room, {}); const timelineSet = new EventTimelineSet(room, {});
for (const [, thread] of room.threads) { for (const [, thread] of room.threads) {
const isOwnEvent = thread.rootEvent.getSender() === client.getUserId(); const isOwnEvent = thread.rootEvent.getSender() === client.getUserId();
if (filterType !== ThreadFilterType.My || isOwnEvent) { if (filterType !== ThreadFilterType.My || isOwnEvent) {
timelineSet.getLiveTimeline().addEvent(thread.rootEvent); timelineSet.getLiveTimeline().addEvent(thread.rootEvent, false);
} }
} }
}
return timelineSet; return timelineSet;
}
} }
interface IProps { interface IProps {