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