From 928d7f2b1ed141a4dde82ec87fd7bebd503d2d0f Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 23 Oct 2023 10:09:58 +1100 Subject: [PATCH] add comments and minor refactor --- .../DisappearingMessageConfiguration.swift | 1 + .../ExpirationTimerUpdate.swift | 1 + .../MessageReceiver+ExpirationTimers.swift | 1 + .../Sending & Receiving/MessageSender.swift | 61 ++++++++++--------- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift b/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift index e7c893c73..7a5c994c1 100644 --- a/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift +++ b/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift @@ -219,6 +219,7 @@ public extension DisappearingMessagesConfiguration { // MARK: - UI Constraints extension DisappearingMessagesConfiguration { + // TODO: Remove this when disappearing messages V2 is up and running public static var validDurationsSeconds: [TimeInterval] { return [ 5, diff --git a/SessionMessagingKit/Messages/Control Messages/ExpirationTimerUpdate.swift b/SessionMessagingKit/Messages/Control Messages/ExpirationTimerUpdate.swift index ab7966b37..ec0947b0c 100644 --- a/SessionMessagingKit/Messages/Control Messages/ExpirationTimerUpdate.swift +++ b/SessionMessagingKit/Messages/Control Messages/ExpirationTimerUpdate.swift @@ -4,6 +4,7 @@ import Foundation import GRDB import SessionUtilitiesKit +// TODO: Refactor this when disappearing messages V2 is up and running public final class ExpirationTimerUpdate: ControlMessage { private enum CodingKeys: String, CodingKey { case syncTarget diff --git a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift index c5eb784c0..eca14f996 100644 --- a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift +++ b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift @@ -5,6 +5,7 @@ import GRDB import SessionUtilitiesKit extension MessageReceiver { + // TODO: Remove this when disappearing messages V2 is up and running internal static func handleExpirationTimerUpdate( _ db: Database, threadId: String, diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index 34cef1a23..4fc8b0fab 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -963,40 +963,45 @@ public final class MessageSender { openGroupServerMessageId: message.openGroupServerMessageId.map { Int64($0) } ).update(db) - if - interaction.isExpiringMessage && isSyncMessage, - let startedAtMs: Double = interaction.expiresStartedAtMs, - let expiresInSeconds: TimeInterval = interaction.expiresInSeconds, - let serverHash: String = message.serverHash - { - let expirationTimestampMs: Int64 = Int64(startedAtMs + expiresInSeconds * 1000) - dependencies.jobRunner.add( + if interaction.isExpiringMessage { + // Start disappearing messages job after a message is successfully sent. + // For DAR and DAS outgoing messages, the expiration start time are the + // same as message sentTimestamp. So do this once, DAR and DAS messages + // should all be covered. + dependencies.jobRunner.upsert( db, - job: Job( - variant: .expirationUpdate, - behaviour: .runOnce, - threadId: interaction.threadId, - details: ExpirationUpdateJob.Details( - serverHashes: [serverHash], - expirationTimestampMs: expirationTimestampMs - ) + job: DisappearingMessagesJob.updateNextRunIfNeeded( + db, + interaction: interaction, + startedAtMs: Double(interaction.timestampMs) ), canStartJob: true, using: dependencies ) + + if + isSyncMessage, + let startedAtMs: Double = interaction.expiresStartedAtMs, + let expiresInSeconds: TimeInterval = interaction.expiresInSeconds, + let serverHash: String = message.serverHash + { + let expirationTimestampMs: Int64 = Int64(startedAtMs + expiresInSeconds * 1000) + dependencies.jobRunner.add( + db, + job: Job( + variant: .expirationUpdate, + behaviour: .runOnce, + threadId: interaction.threadId, + details: ExpirationUpdateJob.Details( + serverHashes: [serverHash], + expirationTimestampMs: expirationTimestampMs + ) + ), + canStartJob: true, + using: dependencies + ) + } } - - dependencies.jobRunner.upsert( - db, - job: DisappearingMessagesJob.updateNextRunIfNeeded( - db, - interaction: interaction, - startedAtMs: Double(interaction.timestampMs) - ), - canStartJob: true, - using: dependencies - ) - } // Mark the message as sent