From 66e45199d5997705948c80270307749ea9bc7ac8 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 3 Jul 2023 17:19:28 +1000 Subject: [PATCH] handle already read disappearing messages --- .../MessageReceiver+VisibleMessages.swift | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift index 2e06419a1..46ef8d7c5 100644 --- a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift +++ b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift @@ -215,6 +215,15 @@ extension MessageReceiver { syncTarget: message.syncTarget ) + startDisappearingMessagesIfNeed( + db, + threadId: threadId, + interactionId: interactionId, + variant: interaction.variant, + wasRead: interaction.wasRead, + shouldExpire: (interaction.isExpiringMessage && interaction.expiresStartedAtMs == nil) + ) + // Parse & persist attachments let attachments: [Attachment] = try dataMessage.attachments .compactMap { proto -> Attachment? in @@ -407,6 +416,29 @@ extension MessageReceiver { return interactionId } + private static func startDisappearingMessagesIfNeed( + _ db: Database, + threadId: String, + interactionId: Int64, + variant: Interaction.Variant, + wasRead: Bool, + shouldExpire: Bool + ) { + // Only start a disappearing message job when the incoming message is already read + // according to user config + guard variant == .standardIncoming && wasRead && shouldExpire else { return } + + JobRunner.upsert( + db, + job: DisappearingMessagesJob.updateNextRunIfNeeded( + db, + interactionIds: [interactionId], + startedAtMs: TimeInterval(SnodeAPI.currentOffsetTimestampMs()), + threadId: threadId + ) + ) + } + private static func updateRecipientAndReadStatesForOutgoingInteraction( _ db: Database, thread: SessionThread,