@@ -1456,25 +1456,24 @@ class TimelinePanel extends React.Component<IProps, IState> {
14561456 * such events were found, then it returns 0.
14571457 */
14581458 private checkForPreJoinUISI ( events : MatrixEvent [ ] ) : number {
1459+ const cli = MatrixClientPeg . get ( ) ;
14591460 const room = this . props . timelineSet . room ;
14601461
14611462 const isThreadTimeline = [ TimelineRenderingType . Thread , TimelineRenderingType . ThreadsList ]
14621463 . includes ( this . context . timelineRenderingType ) ;
1463- if ( events . length === 0
1464- || ! room
1465- || ! MatrixClientPeg . get ( ) . isRoomEncrypted ( room . roomId )
1466- || isThreadTimeline ) {
1464+ if ( events . length === 0 || ! room || ! cli . isRoomEncrypted ( room . roomId ) || isThreadTimeline ) {
1465+ logger . info ( "checkForPreJoinUISI: showing all messages, skipping check" ) ;
14671466 return 0 ;
14681467 }
14691468
1470- const userId = MatrixClientPeg . get ( ) . credentials . userId ;
1469+ const userId = cli . credentials . userId ;
14711470
14721471 // get the user's membership at the last event by getting the timeline
14731472 // that the event belongs to, and traversing the timeline looking for
14741473 // that event, while keeping track of the user's membership
1475- let i ;
1474+ let i = events . length - 1 ;
14761475 let userMembership = "leave" ;
1477- for ( i = events . length - 1 ; i >= 0 ; i -- ) {
1476+ for ( ; i >= 0 ; i -- ) {
14781477 const timeline = room . getTimelineForEvent ( events [ i ] . getId ( ) ) ;
14791478 if ( ! timeline ) {
14801479 // Somehow, it seems to be possible for live events to not have
@@ -1486,18 +1485,15 @@ class TimelinePanel extends React.Component<IProps, IState> {
14861485 ) ;
14871486 continue ;
14881487 }
1489- const userMembershipEvent =
1490- timeline . getState ( EventTimeline . FORWARDS ) . getMember ( userId ) ;
1491- userMembership = userMembershipEvent ? userMembershipEvent . membership : "leave" ;
1488+
1489+ userMembership = timeline . getState ( EventTimeline . FORWARDS ) . getMember ( userId ) ?. membership ?? "leave" ;
14921490 const timelineEvents = timeline . getEvents ( ) ;
14931491 for ( let j = timelineEvents . length - 1 ; j >= 0 ; j -- ) {
14941492 const event = timelineEvents [ j ] ;
14951493 if ( event . getId ( ) === events [ i ] . getId ( ) ) {
14961494 break ;
1497- } else if ( event . getStateKey ( ) === userId
1498- && event . getType ( ) === "m.room.member" ) {
1499- const prevContent = event . getPrevContent ( ) ;
1500- userMembership = prevContent . membership || "leave" ;
1495+ } else if ( event . getStateKey ( ) === userId && event . getType ( ) === EventType . RoomMember ) {
1496+ userMembership = event . getPrevContent ( ) . membership || "leave" ;
15011497 }
15021498 }
15031499 break ;
@@ -1507,19 +1503,18 @@ class TimelinePanel extends React.Component<IProps, IState> {
15071503 // one that was sent when the user wasn't in the room
15081504 for ( ; i >= 0 ; i -- ) {
15091505 const event = events [ i ] ;
1510- if ( event . getStateKey ( ) === userId
1511- && event . getType ( ) === "m.room.member" ) {
1512- const prevContent = event . getPrevContent ( ) ;
1513- userMembership = prevContent . membership || "leave" ;
1514- } else if ( userMembership === "leave" &&
1515- ( event . isDecryptionFailure ( ) || event . isBeingDecrypted ( ) ) ) {
1516- // reached an undecryptable message when the user wasn't in
1517- // the room -- don't try to load any more
1506+ if ( event . getStateKey ( ) === userId && event . getType ( ) === EventType . RoomMember ) {
1507+ userMembership = event . getPrevContent ( ) . membership || "leave" ;
1508+ } else if ( userMembership === "leave" && ( event . isDecryptionFailure ( ) || event . isBeingDecrypted ( ) ) ) {
1509+ // reached an undecryptable message when the user wasn't in the room -- don't try to load any more
15181510 // Note: for now, we assume that events that are being decrypted are
1519- // not decryptable
1511+ // not decryptable - we will be called once more when it is decrypted.
1512+ logger . info ( "checkForPreJoinUISI: reached a pre-join UISI at index " , i ) ;
15201513 return i + 1 ;
15211514 }
15221515 }
1516+
1517+ logger . info ( "checkForPreJoinUISI: did not find pre-join UISI" ) ;
15231518 return 0 ;
15241519 }
15251520
0 commit comments