@@ -15,7 +15,6 @@ limitations under the License.
15
15
*/
16
16
17
17
import { Room } from "matrix-js-sdk/src/models/room" ;
18
- import { Thread } from "matrix-js-sdk/src/models/thread" ;
19
18
import { MatrixEvent } from "matrix-js-sdk/src/models/event" ;
20
19
import { EventType } from "matrix-js-sdk/src/@types/event" ;
21
20
import { M_BEACON } from "matrix-js-sdk/src/@types/beacon" ;
@@ -60,34 +59,36 @@ export function doesRoomHaveUnreadMessages(room: Room): boolean {
60
59
return false ;
61
60
}
62
61
63
- for ( const timeline of [ room , ...room . getThreads ( ) ] ) {
64
- // If the current timeline has unread messages, we're done.
65
- if ( doesRoomOrThreadHaveUnreadMessages ( timeline ) ) {
66
- return true ;
67
- }
68
- }
69
- // If we got here then no timelines were found with unread messages.
70
- return false ;
71
- }
72
-
73
- function doesRoomOrThreadHaveUnreadMessages ( room : Room | Thread ) : boolean {
74
62
const myUserId = MatrixClientPeg . get ( ) . getUserId ( ) ;
75
63
76
- // as we don't send RRs for our own messages, make sure we special case that
77
- // if *we* sent the last message into the room, we consider it not unread!
78
- // Should fix: https://github.com/vector-im/element-web/issues/3263
79
- // https://github.com/vector-im/element-web/issues/2427
80
- // ...and possibly some of the others at
81
- // https://github.com/vector-im/element-web/issues/3363
82
- if ( room . timeline . at ( - 1 ) ?. getSender ( ) === myUserId ) {
83
- return false ;
84
- }
85
-
86
64
// get the most recent read receipt sent by our account.
87
65
// N.B. this is NOT a read marker (RM, aka "read up to marker"),
88
66
// despite the name of the method :((
89
67
const readUpToId = room . getEventReadUpTo ( myUserId ! ) ;
90
68
69
+ if ( ! SettingsStore . getValue ( "feature_thread" ) ) {
70
+ // as we don't send RRs for our own messages, make sure we special case that
71
+ // if *we* sent the last message into the room, we consider it not unread!
72
+ // Should fix: https://github.com/vector-im/element-web/issues/3263
73
+ // https://github.com/vector-im/element-web/issues/2427
74
+ // ...and possibly some of the others at
75
+ // https://github.com/vector-im/element-web/issues/3363
76
+ if ( room . timeline . length && room . timeline [ room . timeline . length - 1 ] . getSender ( ) === myUserId ) {
77
+ return false ;
78
+ }
79
+ }
80
+
81
+ // if the read receipt relates to an event is that part of a thread
82
+ // we consider that there are no unread messages
83
+ // This might be a false negative, but probably the best we can do until
84
+ // the read receipts have evolved to cater for threads
85
+ if ( readUpToId ) {
86
+ const event = room . findEventById ( readUpToId ) ;
87
+ if ( event ?. getThread ( ) ) {
88
+ return false ;
89
+ }
90
+ }
91
+
91
92
// this just looks at whatever history we have, which if we've only just started
92
93
// up probably won't be very much, so if the last couple of events are ones that
93
94
// don't count, we don't know if there are any events that do count between where
0 commit comments