mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Don't unnecessarily open sync transactions
This commit is contained in:
parent
498f5a73b0
commit
41fe33525c
|
@ -387,9 +387,7 @@ public final class SnodeAPI : NSObject {
|
||||||
let (promise, seal) = RawResponsePromise.pending()
|
let (promise, seal) = RawResponsePromise.pending()
|
||||||
let storage = SNSnodeKitConfiguration.shared.storage
|
let storage = SNSnodeKitConfiguration.shared.storage
|
||||||
Threading.workQueue.async {
|
Threading.workQueue.async {
|
||||||
storage.writeSync { transaction in
|
storage.pruneLastMessageHashInfoIfExpired(for: snode, associatedWith: publicKey)
|
||||||
storage.pruneLastMessageHashInfoIfExpired(for: snode, associatedWith: publicKey, using: transaction)
|
|
||||||
}
|
|
||||||
let lastHash = storage.getLastMessageHash(for: snode, associatedWith: publicKey) ?? ""
|
let lastHash = storage.getLastMessageHash(for: snode, associatedWith: publicKey) ?? ""
|
||||||
let parameters = [ "pubKey" : Features.useTestnet ? publicKey.removing05PrefixIfNeeded() : publicKey, "lastHash" : lastHash ]
|
let parameters = [ "pubKey" : Features.useTestnet ? publicKey.removing05PrefixIfNeeded() : publicKey, "lastHash" : lastHash ]
|
||||||
invoke(.getMessages, on: snode, associatedWith: publicKey, parameters: parameters).done2 { seal.fulfill($0) }.catch2 { seal.reject($0) }
|
invoke(.getMessages, on: snode, associatedWith: publicKey, parameters: parameters).done2 { seal.fulfill($0) }.catch2 { seal.reject($0) }
|
||||||
|
@ -403,9 +401,7 @@ public final class SnodeAPI : NSObject {
|
||||||
Threading.workQueue.async {
|
Threading.workQueue.async {
|
||||||
attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) {
|
attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) {
|
||||||
getTargetSnodes(for: publicKey).mapValues2 { targetSnode in
|
getTargetSnodes(for: publicKey).mapValues2 { targetSnode in
|
||||||
storage.writeSync { transaction in
|
storage.pruneLastMessageHashInfoIfExpired(for: targetSnode, associatedWith: publicKey)
|
||||||
storage.pruneLastMessageHashInfoIfExpired(for: targetSnode, associatedWith: publicKey, using: transaction)
|
|
||||||
}
|
|
||||||
let lastHash = storage.getLastMessageHash(for: targetSnode, associatedWith: publicKey) ?? ""
|
let lastHash = storage.getLastMessageHash(for: targetSnode, associatedWith: publicKey) ?? ""
|
||||||
let parameters = [ "pubKey" : Features.useTestnet ? publicKey.removing05PrefixIfNeeded() : publicKey, "lastHash" : lastHash ]
|
let parameters = [ "pubKey" : Features.useTestnet ? publicKey.removing05PrefixIfNeeded() : publicKey, "lastHash" : lastHash ]
|
||||||
return invoke(.getMessages, on: targetSnode, associatedWith: publicKey, parameters: parameters).map2 { rawResponse in
|
return invoke(.getMessages, on: targetSnode, associatedWith: publicKey, parameters: parameters).map2 { rawResponse in
|
||||||
|
|
|
@ -103,12 +103,14 @@ extension Storage {
|
||||||
(transaction as! YapDatabaseReadWriteTransaction).setObject(lastMessageHashInfo, forKey: key, inCollection: Storage.lastMessageHashCollection)
|
(transaction as! YapDatabaseReadWriteTransaction).setObject(lastMessageHashInfo, forKey: key, inCollection: Storage.lastMessageHashCollection)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func pruneLastMessageHashInfoIfExpired(for snode: Snode, associatedWith publicKey: String, using transaction: Any) {
|
public func pruneLastMessageHashInfoIfExpired(for snode: Snode, associatedWith publicKey: String) {
|
||||||
guard let lastMessageHashInfo = getLastMessageHashInfo(for: snode, associatedWith: publicKey),
|
guard let lastMessageHashInfo = getLastMessageHashInfo(for: snode, associatedWith: publicKey),
|
||||||
(lastMessageHashInfo["hash"] as? String) != nil, let expirationDate = (lastMessageHashInfo["expirationDate"] as? NSNumber)?.uint64Value else { return }
|
(lastMessageHashInfo["hash"] as? String) != nil, let expirationDate = (lastMessageHashInfo["expirationDate"] as? NSNumber)?.uint64Value else { return }
|
||||||
let now = NSDate.millisecondTimestamp()
|
let now = NSDate.millisecondTimestamp()
|
||||||
if now >= expirationDate {
|
if now >= expirationDate {
|
||||||
removeLastMessageHashInfo(for: snode, associatedWith: publicKey, using: transaction)
|
Storage.writeSync { transaction in
|
||||||
|
self.removeLastMessageHashInfo(for: snode, associatedWith: publicKey, using: transaction)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ public protocol SessionSnodeKitStorageProtocol {
|
||||||
func setSwarm(to swarm: Set<Snode>, for publicKey: String, using transaction: Any)
|
func setSwarm(to swarm: Set<Snode>, for publicKey: String, using transaction: Any)
|
||||||
func getLastMessageHash(for snode: Snode, associatedWith publicKey: String) -> String?
|
func getLastMessageHash(for snode: Snode, associatedWith publicKey: String) -> String?
|
||||||
func setLastMessageHashInfo(for snode: Snode, associatedWith publicKey: String, to lastMessageHashInfo: JSON, using transaction: Any)
|
func setLastMessageHashInfo(for snode: Snode, associatedWith publicKey: String, to lastMessageHashInfo: JSON, using transaction: Any)
|
||||||
func pruneLastMessageHashInfoIfExpired(for snode: Snode, associatedWith publicKey: String, using transaction: Any)
|
func pruneLastMessageHashInfoIfExpired(for snode: Snode, associatedWith publicKey: String)
|
||||||
func getReceivedMessages(for publicKey: String) -> Set<String>
|
func getReceivedMessages(for publicKey: String) -> Set<String>
|
||||||
func setReceivedMessages(to receivedMessages: Set<String>, for publicKey: String, using transaction: Any)
|
func setReceivedMessages(to receivedMessages: Set<String>, for publicKey: String, using transaction: Any)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue