Don't unnecessarily open sync transactions

This commit is contained in:
Niels Andriesse 2021-07-22 12:59:31 +10:00
parent 44288c45e9
commit 498f5a73b0
1 changed files with 8 additions and 5 deletions

View File

@ -520,18 +520,21 @@ public final class SnodeAPI : NSObject {
} }
private static func removeDuplicates(from rawMessages: [JSON], associatedWith publicKey: String) -> [JSON] { private static func removeDuplicates(from rawMessages: [JSON], associatedWith publicKey: String) -> [JSON] {
var receivedMessages = SNSnodeKitConfiguration.shared.storage.getReceivedMessages(for: publicKey) let oldReceivedMessages = SNSnodeKitConfiguration.shared.storage.getReceivedMessages(for: publicKey)
var newReceivedMessages = oldReceivedMessages
let result = rawMessages.filter { rawMessage in let result = rawMessages.filter { rawMessage in
guard let hash = rawMessage["hash"] as? String else { guard let hash = rawMessage["hash"] as? String else {
SNLog("Missing hash value for message: \(rawMessage).") SNLog("Missing hash value for message: \(rawMessage).")
return false return false
} }
let isDuplicate = receivedMessages.contains(hash) let isDuplicate = newReceivedMessages.contains(hash)
receivedMessages.insert(hash) newReceivedMessages.insert(hash)
return !isDuplicate return !isDuplicate
} }
SNSnodeKitConfiguration.shared.storage.writeSync { transaction in if oldReceivedMessages != newReceivedMessages {
SNSnodeKitConfiguration.shared.storage.setReceivedMessages(to: receivedMessages, for: publicKey, using: transaction) SNSnodeKitConfiguration.shared.storage.writeSync { transaction in
SNSnodeKitConfiguration.shared.storage.setReceivedMessages(to: newReceivedMessages, for: publicKey, using: transaction)
}
} }
return result return result
} }