From d490cf7d19ade7da34747e9994ae39c080a55b4c Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Thu, 17 Feb 2022 11:45:59 +1100 Subject: [PATCH] Fixed an issue where only the first sync config message would be processed --- Session/Meta/AppDelegate.swift | 7 ++++++- .../MessageReceiver+Handling.swift | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index bb28b0b81..b12a3d757 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -14,7 +14,12 @@ extension AppDelegate { let job = MessageSendJob(message: configurationMessage, destination: destination) JobQueue.shared.add(job, using: transaction) } - userDefaults[.lastConfigurationSync] = Date() + + // Only update the 'lastConfigurationSync' timestamp if we have done the first sync (Don't want + // a new device config sync to override config syncs from other devices) + if userDefaults[.hasSyncedInitialConfiguration] { + userDefaults[.lastConfigurationSync] = Date() + } } func forceSyncConfigurationNowIfNeeded() -> Promise { diff --git a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift index deb1880e5..dc87d3cd6 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift @@ -190,15 +190,23 @@ extension MessageReceiver { SNLog("Configuration message received.") let storage = SNMessagingKitConfiguration.shared.storage let transaction = transaction as! YapDatabaseReadWriteTransaction + let messageSentTimestamp: TimeInterval = TimeInterval((message.sentTimestamp ?? 0) / 1000) // `sentTimestamp` is in ms + let lastConfigTimestamp: TimeInterval = (UserDefaults.standard[.lastConfigurationSync]?.timeIntervalSince1970 ?? Date(timeIntervalSince1970: 0).timeIntervalSince1970) + // Profile var userProfileKey: OWSAES256Key? = nil if let profileKey = message.profileKey { userProfileKey = OWSAES256Key(data: profileKey) } updateProfileIfNeeded(publicKey: userPublicKey, name: message.displayName, profilePictureURL: message.profilePictureURL, profileKey: userProfileKey, sentTimestamp: message.sentTimestamp!, transaction: transaction) - // Initial configuration sync - if !UserDefaults.standard[.hasSyncedInitialConfiguration] { - UserDefaults.standard[.hasSyncedInitialConfiguration] = true - NotificationCenter.default.post(name: .initialConfigurationMessageReceived, object: nil) + + if !UserDefaults.standard[.hasSyncedInitialConfiguration] || messageSentTimestamp > lastConfigTimestamp { + if !UserDefaults.standard[.hasSyncedInitialConfiguration] { + UserDefaults.standard[.hasSyncedInitialConfiguration] = true + NotificationCenter.default.post(name: .initialConfigurationMessageReceived, object: nil) + } + + UserDefaults.standard[.lastConfigurationSync] = Date(timeIntervalSince1970: messageSentTimestamp) + // Contacts for contactInfo in message.contacts { let sessionID = contactInfo.publicKey!