Skip to content

Commit 78a6a99

Browse files
fix(llc): fix muted channel's unreadCount incorrectly updated (#2116)
Co-authored-by: Sahil Kumar <[email protected]>
1 parent 1051d18 commit 78a6a99

File tree

2 files changed

+40
-13
lines changed

2 files changed

+40
-13
lines changed

packages/stream_chat/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## Upcoming
2+
3+
🐞 Fixed
4+
5+
- [[#2016]](https://github.com/GetStream/stream-chat-flutter/issues/2016) Fix muted channel's unreadCount incorrectly updated.
6+
17
## 9.4.0
28

39
🔄 Changed

packages/stream_chat/lib/src/client/channel.dart

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)