@@ -61,51 +61,57 @@ const useLatestEvents = ({
6161
6262 useEffect ( ( ) => {
6363 if ( mx ) {
64- ( async ( ) => {
65- const decryptionPromises = rooms . map ( ( room ) => room . decryptCriticalEvents ( ) ) ;
64+ const getLatestPreviewEvent = async ( room : Room ) => {
65+ const lastLiveEvent = room . getLastLiveEvent ( ) ;
66+
67+ if ( lastLiveEvent && shouldShowEvent ( mx , lastLiveEvent ) ) {
68+ await mx . decryptEventIfNeeded ( lastLiveEvent ) ;
69+ return lastLiveEvent ;
70+ }
71+
72+ const events = room . getLiveTimeline ( ) . getEvents ( ) ;
73+ const decryptionPromises = events . map ( ( event ) => mx . decryptEventIfNeeded ( event ) ) ;
6674 await Promise . all ( decryptionPromises ) ;
67- const _latestEvents = rooms . map ( ( room ) => {
68- const events = room . getLiveTimeline ( ) . getEvents ( ) ;
6975
70- for ( let i = events . length - 1 ; i >= 0 ; i -= 1 ) {
71- const event = events [ i ] ;
72- if ( shouldShowEvent ( mx , event ) ) {
73- return event ;
74- }
76+ const decryptedEvents = room . getLiveTimeline ( ) . getEvents ( ) ;
77+ for ( let i = decryptedEvents . length - 1 ; i >= 0 ; i -= 1 ) {
78+ const event = decryptedEvents [ i ] ;
79+ if ( shouldShowEvent ( mx , event ) ) {
80+ return event ;
7581 }
76- return undefined ;
77- } ) ;
78- setLatestEvents ( _latestEvents ) ;
79- } ) ( ) ;
80- }
81- } , [ mx , rooms ] ) ;
82+ }
83+
84+ return undefined ;
85+ } ;
8286
83- useEffect ( ( ) => {
84- if ( mx ) {
8587 ( async ( ) => {
86- const timelinePromises = rooms . map ( ( room ) => {
87- const timeline = room . getLiveTimeline ( ) ;
88- return mx ?. paginateEventTimeline ( timeline , {
89- backwards : true ,
90- limit : 10 ,
91- } ) ;
92- } ) ;
93- await Promise . all ( timelinePromises ) ;
94-
95- const decryptionPromises = rooms . map ( ( room ) => room . decryptAllEvents ( ) ) ;
96- await Promise . all ( decryptionPromises ) ;
97- const _latestEvents = rooms . map ( ( room ) => {
98- const events = room . getLiveTimeline ( ) . getEvents ( ) ;
88+ const latestEventsPromises = rooms . map ( ( room ) => getLatestPreviewEvent ( room ) ) ;
89+ const _latestEvents = await Promise . all ( latestEventsPromises ) ;
9990
100- for ( let i = events . length - 1 ; i >= 0 ; i -= 1 ) {
101- const event = events [ i ] ;
102- if ( shouldShowEvent ( mx , event ) ) {
103- return event ;
104- }
105- }
106- return undefined ;
107- } ) ;
10891 setLatestEvents ( _latestEvents ) ;
92+
93+ const undefinedIndexes = _latestEvents . map (
94+ ( value , index ) => value === undefined ? index : undefined
95+ ) . filter (
96+ ( index ) => index !== undefined
97+ ) ;
98+
99+ const backPaginationPromises = undefinedIndexes . map (
100+ ( index ) => {
101+ const room = rooms [ index ] ;
102+ const timeline = room . getLiveTimeline ( ) ;
103+ return mx ?. paginateEventTimeline ( timeline , {
104+ backwards : true ,
105+ limit : 10 ,
106+ } ) ;
107+ }
108+ ) ;
109+ await Promise . all ( backPaginationPromises ) ;
110+
111+ const newLatestEventsPromises = rooms . map ( ( room ) => getLatestPreviewEvent ( room ) ) ;
112+ const _newLatestEvents = await Promise . all ( newLatestEventsPromises ) ;
113+
114+ setLatestEvents ( _newLatestEvents ) ;
109115 } ) ( ) ;
110116 }
111117 } , [ mx , rooms ] ) ;
0 commit comments