@@ -20,6 +20,27 @@ import { IAlgorithm } from "./IAlgorithm";
2020import { MatrixClientPeg } from "../../../../MatrixClientPeg" ;
2121import * as Unread from "../../../../Unread" ;
2222import { EffectiveMembership , getEffectiveMembership } from "../../../../utils/membership" ;
23+ import { EventType } from "matrix-js-sdk/src/@types/event" ;
24+ import { MatrixEvent } from "matrix-js-sdk/src/models/event" ;
25+
26+ export function shouldCauseReorder ( event : MatrixEvent ) : boolean {
27+ const type = event . getType ( ) ;
28+ const content = event . getContent ( ) ;
29+ const prevContent = event . getPrevContent ( ) ;
30+
31+ // Never ignore membership changes
32+ if ( type === EventType . RoomMember && prevContent . membership !== content . membership ) return true ;
33+
34+ // Ignore status changes
35+ // XXX: This should be an enum
36+ if ( type === "im.vector.user_status" ) return false ;
37+ // Ignore display name changes
38+ if ( type === EventType . RoomMember && prevContent . displayname !== content . displayname ) return false ;
39+ // Ignore avatar changes
40+ if ( type === EventType . RoomMember && prevContent . avatar_url !== content . avatar_url ) return false ;
41+
42+ return true ;
43+ }
2344
2445export const sortRooms = ( rooms : Room [ ] ) : Room [ ] => {
2546 // We cache the timestamp lookup to avoid iterating forever on the timeline
@@ -68,7 +89,10 @@ export const sortRooms = (rooms: Room[]): Room[] => {
6889 const ev = r . timeline [ i ] ;
6990 if ( ! ev . getTs ( ) ) continue ; // skip events that don't have timestamps (tests only?)
7091
71- if ( ev . getSender ( ) === myUserId || Unread . eventTriggersUnreadCount ( ev ) ) {
92+ if (
93+ ( ev . getSender ( ) === myUserId && shouldCauseReorder ( ev ) ) ||
94+ Unread . eventTriggersUnreadCount ( ev )
95+ ) {
7296 return ev . getTs ( ) ;
7397 }
7498 }
0 commit comments