@@ -2796,19 +2796,40 @@ class ChannelClientState {
27962796 }
27972797
27982798 bool _countMessageAsUnread (Message message) {
2799- final userId = _channel.client.state.currentUser? .id;
2800- final userIsMuted =
2801- _channel.client.state.currentUser? .mutes.firstWhereOrNull (
2802- (m) => m.user.id == message.user? .id,
2803- ) !=
2804- null ;
2805- final isThreadMessage = message.parentId != null ;
2806-
2807- return ! message.silent &&
2808- ! message.shadowed &&
2809- message.user? .id != userId &&
2810- ! userIsMuted &&
2811- ! isThreadMessage;
2799+ // Don't count if the message is silent or shadowed.
2800+ if (message.silent) return false ;
2801+ if (message.shadowed) return false ;
2802+
2803+ // Don't count if the channel is muted.
2804+ if (_channel.isMuted) return false ;
2805+
2806+ // Don't count if the channel doesn't allow read events.
2807+ if (! _channel.ownCapabilities.contains (PermissionType .readEvents)) {
2808+ return false ;
2809+ }
2810+
2811+ // Don't count thread replies which are not shown in the channel as unread.
2812+ if (message.parentId != null && message.showInChannel == false ) {
2813+ return false ;
2814+ }
2815+
2816+ // Don't count if the message doesn't have a user.
2817+ final messageUser = message.user;
2818+ if (messageUser == null ) return false ;
2819+
2820+ // Don't count if the current user is not set.
2821+ final currentUser = _channel.client.state.currentUser;
2822+ if (currentUser == null ) return false ;
2823+
2824+ // Don't count user's own messages as unread.
2825+ if (messageUser.id == currentUser.id) return false ;
2826+
2827+ // Don't count messages from muted users as unread.
2828+ final isMuted = currentUser.mutes.any ((it) => it.user.id == messageUser.id);
2829+ if (isMuted) return false ;
2830+
2831+ // If we've passed all checks, count the message as unread.
2832+ return true ;
28122833 }
28132834
28142835 /// Counts the number of unread messages mentioning the current user.
0 commit comments