From 20f45697d5ce3d0fd2c44962cc61d0e165229215 Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Wed, 3 Dec 2025 14:47:27 +0200 Subject: [PATCH 1/2] Fix reading messages from muted users --- CHANGELOG.md | 3 +- .../ChatChannel/ChatChannelViewModel.swift | 5 ++-- .../ChatChannelViewModel_Tests.swift | 29 +++++++++++++++++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eca98c61..f92171f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +### 🐞 Fixed +- Fix reading messages from muted users # [4.94.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.94.0) _December 02, 2025_ diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift index 5e5d90c5..6c2376a8 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift @@ -613,10 +613,11 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { } private func sendReadEventIfNeeded(for message: ChatMessage) { - guard let channel, channel.unreadCount.messages > 0 else { + guard let channel, let currentUserId = chatClient.currentUserId else { return } + if currentUserMarkedMessageUnread { return } - if currentUserMarkedMessageUnread { + if let read = channel.read(for: currentUserId), read.lastReadAt > message.createdAt { return } throttler.execute { [weak self] in diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift index 8ac70038..ed399ba5 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ChatChannelViewModel_Tests.swift @@ -740,11 +740,36 @@ class ChatChannelViewModel_Tests: StreamChatTestCase { XCTAssertEqual(1, channelController.markReadCallCount) } - func test_chatChannelVM_sendReadEventIfNeeded_whenChannelHasNoUnreadMessages() { + func test_chatChannelVM_sendReadEventIfNeeded_whenChannelHasNoReads_thenMarkReadIsCalled() { // Given let message = ChatMessage.mock() let channelController = makeChannelController(messages: [message]) - channelController.channel_mock = .mock(cid: .unique, unreadCount: ChannelUnreadCount(messages: 0, mentions: 0)) + channelController.channel_mock = .mockDMChannel(reads: []) + channelController.hasLoadedAllNextMessages_mock = true + let viewModel = ChatChannelViewModel(channelController: channelController) + viewModel.currentUserMarkedMessageUnread = false + viewModel.throttler = Throttler_Mock(interval: 0) + + // When + viewModel.handleMessageAppear(index: 0, scrollDirection: .down) + + // Then + XCTAssertEqual(1, channelController.markReadCallCount) + } + + func test_chatChannelVM_sendReadEventIfNeeded_whenChannelReadHasMoreRecentTimestamp_thenMarkReadIsNotCalled() { + // Given + let message = ChatMessage.mock() + let channelController = makeChannelController(messages: [message]) + channelController.channel_mock = .mockDMChannel( + reads: [.mock( + lastReadAt: .distantFuture, + lastReadMessageId: .unique, + unreadMessagesCount: 0, + user: .mock(id: chatClient.currentUserId ?? "") + )] + ) + channelController.hasLoadedAllNextMessages_mock = true let viewModel = ChatChannelViewModel(channelController: channelController) viewModel.currentUserMarkedMessageUnread = false viewModel.throttler = Throttler_Mock(interval: 0) From c10a0ca8ad3b0f6d0680defa2ebe803f3f767aaa Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Wed, 3 Dec 2025 14:50:51 +0200 Subject: [PATCH 2/2] CHANGELOG entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f92171f7..b3f41542 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming ### 🐞 Fixed -- Fix reading messages from muted users +- Fix reading messages from muted users [#1063](https://github.com/GetStream/stream-chat-swiftui/pull/1063) # [4.94.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.94.0) _December 02, 2025_