Skip to content

Commit 3d9a87f

Browse files
authored
Fix reading messages from muted users (#1063)
1 parent f7c3d56 commit 3d9a87f

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1515
- `MentionUsersView`
1616
- `ParticipantInfoView`
1717
- `ChatThreadListItem`
18+
- Fix reading messages from muted users [#1063](https://github.com/GetStream/stream-chat-swiftui/pull/1063)
1819

1920
# [4.94.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.94.0)
2021
_December 02, 2025_

Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,10 +613,11 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource {
613613
}
614614

615615
private func sendReadEventIfNeeded(for message: ChatMessage) {
616-
guard let channel, channel.unreadCount.messages > 0 else {
616+
guard let channel, let currentUserId = chatClient.currentUserId else { return }
617+
if currentUserMarkedMessageUnread {
617618
return
618619
}
619-
if currentUserMarkedMessageUnread {
620+
if let read = channel.read(for: currentUserId), read.lastReadAt > message.createdAt {
620621
return
621622
}
622623
throttler.execute { [weak self] in

StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,11 +740,36 @@ class ChatChannelViewModel_Tests: StreamChatTestCase {
740740
XCTAssertEqual(1, channelController.markReadCallCount)
741741
}
742742

743-
func test_chatChannelVM_sendReadEventIfNeeded_whenChannelHasNoUnreadMessages() {
743+
func test_chatChannelVM_sendReadEventIfNeeded_whenChannelHasNoReads_thenMarkReadIsCalled() {
744744
// Given
745745
let message = ChatMessage.mock()
746746
let channelController = makeChannelController(messages: [message])
747-
channelController.channel_mock = .mock(cid: .unique, unreadCount: ChannelUnreadCount(messages: 0, mentions: 0))
747+
channelController.channel_mock = .mockDMChannel(reads: [])
748+
channelController.hasLoadedAllNextMessages_mock = true
749+
let viewModel = ChatChannelViewModel(channelController: channelController)
750+
viewModel.currentUserMarkedMessageUnread = false
751+
viewModel.throttler = Throttler_Mock(interval: 0)
752+
753+
// When
754+
viewModel.handleMessageAppear(index: 0, scrollDirection: .down)
755+
756+
// Then
757+
XCTAssertEqual(1, channelController.markReadCallCount)
758+
}
759+
760+
func test_chatChannelVM_sendReadEventIfNeeded_whenChannelReadHasMoreRecentTimestamp_thenMarkReadIsNotCalled() {
761+
// Given
762+
let message = ChatMessage.mock()
763+
let channelController = makeChannelController(messages: [message])
764+
channelController.channel_mock = .mockDMChannel(
765+
reads: [.mock(
766+
lastReadAt: .distantFuture,
767+
lastReadMessageId: .unique,
768+
unreadMessagesCount: 0,
769+
user: .mock(id: chatClient.currentUserId ?? "")
770+
)]
771+
)
772+
channelController.hasLoadedAllNextMessages_mock = true
748773
let viewModel = ChatChannelViewModel(channelController: channelController)
749774
viewModel.currentUserMarkedMessageUnread = false
750775
viewModel.throttler = Throttler_Mock(interval: 0)

0 commit comments

Comments
 (0)