File tree Expand file tree Collapse file tree 3 files changed +37
-0
lines changed
Sources/StreamChat/WebSocketClient/EventMiddlewares
Tests/StreamChatTests/WebSocketClient/EventMiddlewares Expand file tree Collapse file tree 3 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
## StreamChat
7
7
### 🐞 Fixed
8
8
- 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 )
9
10
10
11
# [ 4.78.0] ( https://github.com/GetStream/stream-chat-swift/releases/tag/4.78.0 )
11
12
_ April 24, 2025_
Original file line number Diff line number Diff line change @@ -222,6 +222,10 @@ struct ChannelReadUpdaterMiddleware: EventMiddleware {
222
222
return . messageIsSystem
223
223
}
224
224
225
+ if message. isShadowed {
226
+ return . messageIsShadowed
227
+ }
228
+
225
229
if message. createdAt <= channelRead. lastReadAt. bridgeDate {
226
230
return . messageIsSeen
227
231
}
@@ -237,6 +241,7 @@ private enum UnreadSkippingReason: CustomStringConvertible {
237
241
case messageIsSilent
238
242
case messageIsThreadReply
239
243
case messageIsSystem
244
+ case messageIsShadowed
240
245
case messageIsSeen
241
246
case messageIsSoftDeleted
242
247
@@ -254,6 +259,8 @@ private enum UnreadSkippingReason: CustomStringConvertible {
254
259
return " Thread replies do not affect unread counts "
255
260
case . messageIsSystem:
256
261
return " System messages do not affect unread counts "
262
+ case . messageIsShadowed:
263
+ return " Shadowed messages do not affect unread counts "
257
264
case . messageIsSeen:
258
265
return " Seen messages do not affect unread counts "
259
266
case . messageIsSoftDeleted:
Original file line number Diff line number Diff line change @@ -591,6 +591,35 @@ final class ChannelReadUpdaterMiddleware_Tests: XCTestCase {
591
591
XCTAssertEqual ( Int ( read. unreadMessageCount) , currentUserReadPayload. unreadMessagesCount)
592
592
}
593
593
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
+
594
623
func test_messageNewEvent_whenMessageIsRead_doesNotIncrementUnreadCount( ) throws {
595
624
// WHEN
596
625
let regularMessageEarlierThanLastRead : MessagePayload = . dummy(
You can’t perform that action at this time.
0 commit comments