@@ -280,6 +280,7 @@ class TimelinePanel extends React.Component<IProps, IState> {
280
280
const cli = MatrixClientPeg . get ( ) ;
281
281
cli . on ( RoomEvent . Timeline , this . onRoomTimeline ) ;
282
282
cli . on ( RoomEvent . TimelineReset , this . onRoomTimelineReset ) ;
283
+ this . props . timelineSet . room . on ( RoomEvent . TimelineRefresh , this . onRoomTimelineRefresh ) ;
283
284
cli . on ( RoomEvent . Redaction , this . onRoomRedaction ) ;
284
285
if ( SettingsStore . getValue ( "feature_msc3531_hide_messages_pending_moderation" ) ) {
285
286
// Make sure that events are re-rendered when their visibility-pending-moderation changes.
@@ -370,6 +371,8 @@ class TimelinePanel extends React.Component<IProps, IState> {
370
371
client . removeListener ( MatrixEventEvent . VisibilityChange , this . onEventVisibilityChange ) ;
371
372
client . removeListener ( ClientEvent . Sync , this . onSync ) ;
372
373
}
374
+
375
+ this . props . timelineSet . room . removeListener ( RoomEvent . TimelineRefresh , this . onRoomTimelineRefresh ) ;
373
376
}
374
377
375
378
private onMessageListUnfillRequest = ( backwards : boolean , scrollToken : string ) : void => {
@@ -627,10 +630,18 @@ class TimelinePanel extends React.Component<IProps, IState> {
627
630
} ) ;
628
631
} ;
629
632
633
+ private onRoomTimelineRefresh = ( room : Room , timelineSet : EventTimelineSet ) : void => {
634
+ console . log ( `onRoomTimelineRefresh skipping=${ timelineSet !== this . props . timelineSet } ` ) ;
635
+ if ( timelineSet !== this . props . timelineSet ) return ;
636
+
637
+ this . refreshTimeline ( ) ;
638
+ } ;
639
+
630
640
private onRoomTimelineReset = ( room : Room , timelineSet : EventTimelineSet ) : void => {
641
+ console . log ( `onRoomTimelineReset skipping=${ timelineSet !== this . props . timelineSet } skippingBecauseAtBottom=${ this . canResetTimeline ( ) } ` ) ;
631
642
if ( timelineSet !== this . props . timelineSet ) return ;
632
643
633
- if ( this . messagePanel . current && this . messagePanel . current . isAtBottom ( ) ) {
644
+ if ( this . canResetTimeline ( ) ) {
634
645
this . loadTimeline ( ) ;
635
646
}
636
647
} ;
@@ -1181,6 +1192,9 @@ class TimelinePanel extends React.Component<IProps, IState> {
1181
1192
* @param {boolean? } scrollIntoView whether to scroll the event into view.
1182
1193
*/
1183
1194
private loadTimeline ( eventId ?: string , pixelOffset ?: number , offsetBase ?: number , scrollIntoView = true ) : void {
1195
+ console . log ( 'TimelinePanel: loadTimeline' , this . props . timelineSet . getTimelines ( ) , this . props . timelineSet . getTimelines ( ) . map ( ( timeline ) => {
1196
+ return timeline . getEvents ( ) . length ;
1197
+ } ) )
1184
1198
this . timelineWindow = new TimelineWindow (
1185
1199
MatrixClientPeg . get ( ) , this . props . timelineSet ,
1186
1200
{ windowLimit : this . props . timelineCap } ) ;
@@ -1319,6 +1333,7 @@ class TimelinePanel extends React.Component<IProps, IState> {
1319
1333
// get the list of events from the timeline window and the pending event list
1320
1334
private getEvents ( ) : Pick < IState , "events" | "liveEvents" | "firstVisibleEventIndex" > {
1321
1335
const events : MatrixEvent [ ] = this . timelineWindow . getEvents ( ) ;
1336
+ console . log ( 'TimelinePanel: getEvents' , events . length ) ;
1322
1337
1323
1338
// `arrayFastClone` performs a shallow copy of the array
1324
1339
// we want the last event to be decrypted first but displayed last
0 commit comments