@@ -43,32 +43,32 @@ async function getThreadTimelineSet(
43
43
room : Room ,
44
44
filterType = ThreadFilterType . All ,
45
45
) : Promise < EventTimelineSet > {
46
- const myUserId = client . getUserId ( ) ;
47
- const filter = new Filter ( myUserId ) ;
46
+ const capabilities = await client . getCapabilities ( ) ;
47
+ const serverSupportsThreads = capabilities [ 'io.element.thread' ] ?. enabled ;
48
48
49
- const definition : IFilterDefinition = {
50
- "room" : {
51
- "timeline" : {
52
- [ UNSTABLE_FILTER_RELATION_TYPES . name ] : [ RelationType . Thread ] ,
53
- } ,
54
- } ,
55
- } ;
56
-
57
- if ( filterType === ThreadFilterType . My ) {
58
- definition . room . timeline [ UNSTABLE_FILTER_RELATION_SENDERS . name ] = [ myUserId ] ;
59
- }
49
+ if ( serverSupportsThreads ) {
50
+ const myUserId = client . getUserId ( ) ;
51
+ const filter = new Filter ( myUserId ) ;
60
52
61
- filter . setDefinition ( definition ) ;
53
+ const definition : IFilterDefinition = {
54
+ "room" : {
55
+ "timeline" : {
56
+ [ UNSTABLE_FILTER_RELATION_TYPES . name ] : [ RelationType . Thread ] ,
57
+ } ,
58
+ } ,
59
+ } ;
62
60
63
- let timelineSet ;
61
+ if ( filterType === ThreadFilterType . My ) {
62
+ definition . room . timeline [ UNSTABLE_FILTER_RELATION_SENDERS . name ] = [ myUserId ] ;
63
+ }
64
64
65
- try {
65
+ filter . setDefinition ( definition ) ;
66
66
const filterId = await client . getOrCreateFilter (
67
67
`THREAD_PANEL_${ room . roomId } _${ filterType } ` ,
68
68
filter ,
69
69
) ;
70
70
filter . filterId = filterId ;
71
- timelineSet = room . getOrCreateFilteredTimelineSet (
71
+ const timelineSet = room . getOrCreateFilteredTimelineSet (
72
72
filter ,
73
73
{ prepopulateTimeline : false } ,
74
74
) ;
@@ -78,20 +78,20 @@ async function getThreadTimelineSet(
78
78
timelineSet . getLiveTimeline ( ) ,
79
79
{ backwards : true , limit : 20 } ,
80
80
) ;
81
- } catch ( e ) {
81
+ return timelineSet ;
82
+ } else {
82
83
// Filter creation fails if HomeServer does not support the new relation
83
84
// filter fields. We fallback to the threads that have been discovered in
84
85
// the main timeline
85
- timelineSet = new EventTimelineSet ( room , { } ) ;
86
+ const timelineSet = new EventTimelineSet ( room , { } ) ;
86
87
for ( const [ , thread ] of room . threads ) {
87
88
const isOwnEvent = thread . rootEvent . getSender ( ) === client . getUserId ( ) ;
88
89
if ( filterType !== ThreadFilterType . My || isOwnEvent ) {
89
- timelineSet . getLiveTimeline ( ) . addEvent ( thread . rootEvent ) ;
90
+ timelineSet . getLiveTimeline ( ) . addEvent ( thread . rootEvent , false ) ;
90
91
}
91
92
}
93
+ return timelineSet ;
92
94
}
93
-
94
- return timelineSet ;
95
95
}
96
96
97
97
interface IProps {
0 commit comments