Skip to content

Commit 29d6225

Browse files
authored
Fix shadowed messages increasing the channel messages unread count (#3665)
1 parent 162ab21 commit 29d6225

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66
## StreamChat
77
### 🐞 Fixed
88
- Fix swipe to reply enabled when quoting a message is disabled [#3662](https://github.com/GetStream/stream-chat-swift/pull/3662)
9+
- Fix shadowed messages increasing the channel messages unread count [#3665](https://github.com/GetStream/stream-chat-swift/pull/3665)
910

1011
# [4.78.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.78.0)
1112
_April 24, 2025_

Sources/StreamChat/WebSocketClient/EventMiddlewares/ChannelReadUpdaterMiddleware.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ struct ChannelReadUpdaterMiddleware: EventMiddleware {
222222
return .messageIsSystem
223223
}
224224

225+
if message.isShadowed {
226+
return .messageIsShadowed
227+
}
228+
225229
if message.createdAt <= channelRead.lastReadAt.bridgeDate {
226230
return .messageIsSeen
227231
}
@@ -237,6 +241,7 @@ private enum UnreadSkippingReason: CustomStringConvertible {
237241
case messageIsSilent
238242
case messageIsThreadReply
239243
case messageIsSystem
244+
case messageIsShadowed
240245
case messageIsSeen
241246
case messageIsSoftDeleted
242247

@@ -254,6 +259,8 @@ private enum UnreadSkippingReason: CustomStringConvertible {
254259
return "Thread replies do not affect unread counts"
255260
case .messageIsSystem:
256261
return "System messages do not affect unread counts"
262+
case .messageIsShadowed:
263+
return "Shadowed messages do not affect unread counts"
257264
case .messageIsSeen:
258265
return "Seen messages do not affect unread counts"
259266
case .messageIsSoftDeleted:

Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ChannelReadUpdaterMiddleware_Tests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,35 @@ final class ChannelReadUpdaterMiddleware_Tests: XCTestCase {
591591
XCTAssertEqual(Int(read.unreadMessageCount), currentUserReadPayload.unreadMessagesCount)
592592
}
593593

594+
func test_messageNewEvent_whenMessageIsShadowed_doesNotIncrementUnreadCount() throws {
595+
// WHEN
596+
let shadowedMessage: MessagePayload = .dummy(
597+
type: .regular,
598+
messageId: .unique,
599+
authorUserId: anotherUserPayload.id,
600+
createdAt: currentUserReadPayload.lastReadAt.addingTimeInterval(1),
601+
isShadowed: true
602+
)
603+
604+
let messageNewEvent = try MessageNewEventDTO(
605+
from: .init(
606+
eventType: .messageNew,
607+
cid: channelPayload.channel.cid,
608+
user: anotherUserPayload,
609+
message: shadowedMessage,
610+
createdAt: shadowedMessage.createdAt
611+
)
612+
)
613+
614+
try database.writeSynchronously { session in
615+
_ = self.middleware.handle(event: messageNewEvent, session: session)
616+
}
617+
618+
// THEN
619+
let read = try XCTUnwrap(currentUserReadDTO)
620+
XCTAssertEqual(Int(read.unreadMessageCount), currentUserReadPayload.unreadMessagesCount)
621+
}
622+
594623
func test_messageNewEvent_whenMessageIsRead_doesNotIncrementUnreadCount() throws {
595624
// WHEN
596625
let regularMessageEarlierThanLastRead: MessagePayload = .dummy(

0 commit comments

Comments
 (0)