Skip to content

Commit c33202a

Browse files
committed
Exclude current message from unread count calculation
1 parent 6c261f5 commit c33202a

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

Sources/StreamChat/Database/DTOs/ChannelReadDTO.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,16 @@ extension NSManagedObjectContext {
166166
read.lastReadAt = lastReadAt.bridgeDate
167167
read.lastReadMessageId = lastReadMessageId
168168

169+
let excludesMessageId: Bool = {
170+
switch unreadCriteria {
171+
case .messageId: return false
172+
case .messageTimestamp: return true
173+
}
174+
}()
169175
let messagesCount = unreadMessagesCount ?? MessageDTO.countOtherUserMessages(
170176
in: read.channel.cid,
171177
createdAtFrom: lastReadAt,
178+
excludingMessageId: excludesMessageId ? message.id : nil,
172179
context: self
173180
)
174181
read.unreadMessageCount = Int32(messagesCount)

Sources/StreamChat/Database/DTOs/MessageDTO.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,13 +558,17 @@ class MessageDTO: NSManagedObject {
558558
static func countOtherUserMessages(
559559
in cid: String,
560560
createdAtFrom: Date,
561+
excludingMessageId: MessageId?,
561562
context: NSManagedObjectContext
562563
) -> Int {
563-
let subpredicates: [NSPredicate] = [
564+
var subpredicates: [NSPredicate] = [
564565
sentMessagesPredicate(for: cid),
565566
.init(format: "createdAt >= %@", createdAtFrom.bridgeDate),
566567
.init(format: "user.currentUser == nil")
567568
]
569+
if let excludingMessageId {
570+
subpredicates.append(.init(format: "id != %@", excludingMessageId))
571+
}
568572

569573
let request = NSFetchRequest<MessageDTO>(entityName: MessageDTO.entityName)
570574
request.sortDescriptors = [NSSortDescriptor(keyPath: \MessageDTO.defaultSortingKey, ascending: false)]

0 commit comments

Comments
 (0)