diff --git a/SessionMessagingKit/Database/Models/Interaction.swift b/SessionMessagingKit/Database/Models/Interaction.swift index 878e2a6ee..172f6f271 100644 --- a/SessionMessagingKit/Database/Models/Interaction.swift +++ b/SessionMessagingKit/Database/Models/Interaction.swift @@ -102,11 +102,11 @@ public struct Interaction: Codable, Identifiable, Equatable, FetchableRecord, Mu switch self { case .standardIncoming: return true case .infoCall: return true - case .infoDisappearingMessagesUpdate, .infoScreenshotNotification, .infoMediaSavedNotification: return true case .standardOutgoing, .standardIncomingDeleted: return false case .infoClosedGroupCreated, .infoClosedGroupUpdated, .infoClosedGroupCurrentUserLeft, + .infoDisappearingMessagesUpdate, .infoScreenshotNotification, .infoMediaSavedNotification, .infoMessageRequestAccepted: return false } @@ -559,11 +559,23 @@ public extension Interaction { .asRequest(of: Int64.self) .fetchAll(db) + let disappearingInteractionQuery = Interaction + .filter(Interaction.Columns.threadId == threadId) + .filter(Interaction.Columns.timestampMs <= interactionInfo.timestampMs) + .filter(Interaction.Columns.wasRead == true) + .filter(Interaction.Columns.expiresInSeconds != nil) + .filter(Interaction.Columns.expiresStartedAtMs == nil) + + let disappearingInteractionIds: [Int64] = try disappearingInteractionQuery + .select(.id) + .asRequest(of: Int64.self) + .fetchAll(db) + // If there are no other interactions to mark as read then just schedule the jobs // for this interaction (need to ensure the disapeparing messages run for sync'ed // outgoing messages which will always have 'wasRead' as false) guard !interactionIdsToMarkAsRead.isEmpty else { - scheduleJobs(interactionIds: [interactionId]) + scheduleJobs(interactionIds: [interactionId].appending(contentsOf: disappearingInteractionIds)) return } @@ -571,7 +583,7 @@ public extension Interaction { try interactionQuery.updateAll(db, Columns.wasRead.set(to: true)) // Retrieve the interaction ids we want to update - scheduleJobs(interactionIds: interactionIdsToMarkAsRead) + scheduleJobs(interactionIds: interactionIdsToMarkAsRead.appending(contentsOf: disappearingInteractionIds)) } /// This method flags sent messages as read for the specified recipients