From 345f9ec47cfc41fc6100c7d6605c7c5c1d6dcee6 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 22 Jun 2023 11:05:46 +1000 Subject: [PATCH] update legacy closed group + new disappearing message handling in user config --- .../SessionUtil+UserGroups.swift | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift index 3433ea5dd..1e40aab84 100644 --- a/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift +++ b/SessionMessagingKit/SessionUtil/Config Handling/SessionUtil+UserGroups.swift @@ -84,7 +84,8 @@ internal extension SessionUtil { .defaultWith(groupId) .with( isEnabled: (legacyGroup.disappearing_timer > 0), - durationSeconds: TimeInterval(legacyGroup.disappearing_timer) + durationSeconds: TimeInterval(legacyGroup.disappearing_timer), + lastChangeTimestampMs: latestConfigSentTimestampMs ), groupMembers: members .filter { _, isAdmin in !isAdmin } @@ -254,14 +255,29 @@ internal extension SessionUtil { } // Update the disappearing messages timer - _ = try DisappearingMessagesConfiguration + let localConfig: DisappearingMessagesConfiguration = try DisappearingMessagesConfiguration .fetchOne(db, id: group.id) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(group.id)) - .with( - isEnabled: (group.disappearingConfig?.isEnabled == true), - durationSeconds: group.disappearingConfig?.durationSeconds - ) - .saved(db) + + if + let remoteConfig = group.disappearingConfig, + let remoteLastChangeTimestampMs = remoteConfig.lastChangeTimestampMs, + let localLastChangeTimestampMs = localConfig.lastChangeTimestampMs, + remoteLastChangeTimestampMs > localLastChangeTimestampMs + { + _ = try localConfig.with( + isEnabled: remoteConfig.isEnabled, + durationSeconds: remoteConfig.durationSeconds, + type: remoteConfig.type, + lastChangeTimestampMs: remoteConfig.lastChangeTimestampMs + ).save(db) + + _ = try Interaction + .filter(Interaction.Columns.threadId == group.id) + .filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate) + .filter(Interaction.Columns.timestampMs <= (remoteLastChangeTimestampMs - Int64(remoteConfig.durationSeconds * 1000))) + .deleteAll(db) + } // Update the members let updatedMembers: Set = members