diff --git a/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift b/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift index 6c3c0d497..24591f5f9 100644 --- a/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift +++ b/SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift @@ -243,6 +243,14 @@ public extension DisappearingMessagesConfiguration { return String(data: messageInfoData, encoding: .utf8) } + + func isValidV2Config() -> Bool { + if let type = self.type { + return !(self.durationSeconds > 0 && self.type == .unknown) + } else { + return self.durationSeconds == 0 + } + } } // MARK: - Control Message diff --git a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift index 44b7a2919..c5676aeb1 100644 --- a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift +++ b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift @@ -48,7 +48,7 @@ extension MessageReceiver { .fetchOne(db) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(threadId)) - let remoteConfig: DisappearingMessagesConfiguration = localConfig.with( + let updatedConfig: DisappearingMessagesConfiguration = localConfig.with( // If there is no duration then we should disable the expiration timer isEnabled: ((message.duration ?? 0) > 0), durationSeconds: ( @@ -87,7 +87,7 @@ extension MessageReceiver { .update( db, sessionId: threadId, - disappearingMessagesConfig: remoteConfig + disappearingMessagesConfig: updatedConfig ) case .legacyGroup: @@ -95,7 +95,7 @@ extension MessageReceiver { .update( db, groupPublicKey: threadId, - disappearingConfig: remoteConfig + disappearingConfig: updatedConfig ) default: break @@ -106,7 +106,7 @@ extension MessageReceiver { if canPerformChange { // Finally save the changes to the DisappearingMessagesConfiguration (If it's a duplicate // then the interaction unique constraint will prevent the code from getting here) - try remoteConfig.save(db) + try updatedConfig.save(db) } // Add an info message for the user @@ -116,7 +116,7 @@ extension MessageReceiver { threadId: threadId, authorId: sender, variant: .infoDisappearingMessagesUpdate, - body: remoteConfig.messageInfoString( + body: updatedConfig.messageInfoString( threadVariant: threadVariant, senderName: (sender != currentUserPublicKey ? Profile.displayName(db, id: sender) : nil), isPreviousOff: false diff --git a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+Contacts.swift b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+Contacts.swift index 82fbfa49b..fe68cadf6 100644 --- a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+Contacts.swift +++ b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+Contacts.swift @@ -179,7 +179,9 @@ internal extension SessionUtil { .fetchOne(db, id: sessionId) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(sessionId)) - if data.config != localConfig { + let isValid: Bool = Features.useNewDisappearingMessagesConfig ? data.config.isValidV2Config() : true + + if isValid && data.config != localConfig { _ = try data.config.save(db) _ = try Interaction .filter(Interaction.Columns.threadId == sessionId) diff --git a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift index 4cb40eb4a..e6c02aab8 100644 --- a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift +++ b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift @@ -277,8 +277,8 @@ internal extension SessionUtil { .fetchOne(db, id: group.id) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(group.id)) - if let remoteConfig = group.disappearingConfig, localConfig != remoteConfig { - _ = try remoteConfig.save(db) + if let updatedConfig = group.disappearingConfig, localConfig != updatedConfig { + _ = try updatedConfig.save(db) _ = try Interaction .filter(Interaction.Columns.threadId == group.id)