session-ios/SessionMessagingKit/Database/Storage+Shared.swift
Niels Andriesse 519ffa4405 Fully switch to the new contact API
This should improve performance significantly as it avoids many unnecessary sync transactions. It also makes the code more readable.
2021-07-22 14:41:27 +10:00

46 lines
1.7 KiB
Swift

import PromiseKit
import Sodium
extension Storage {
@discardableResult
public func write(with block: @escaping (Any) -> Void) -> Promise<Void> {
Storage.write(with: { block($0) })
}
@discardableResult
public func write(with block: @escaping (Any) -> Void, completion: @escaping () -> Void) -> Promise<Void> {
Storage.write(with: { block($0) }, completion: completion)
}
public func writeSync(with block: @escaping (Any) -> Void) {
Storage.writeSync { block($0) }
}
@objc public func getUserPublicKey() -> String? {
return OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey
}
public func getUserKeyPair() -> ECKeyPair? {
return OWSIdentityManager.shared().identityKeyPair()
}
public func getUserED25519KeyPair() -> Box.KeyPair? {
let dbConnection = OWSIdentityManager.shared().dbConnection
let collection = OWSPrimaryStorageIdentityKeyStoreCollection
guard let hexEncodedPublicKey = dbConnection.object(forKey: LKED25519PublicKey, inCollection: collection) as? String,
let hexEncodedSecretKey = dbConnection.object(forKey: LKED25519SecretKey, inCollection: collection) as? String else { return nil }
let publicKey = Box.KeyPair.PublicKey(hex: hexEncodedPublicKey)
let secretKey = Box.KeyPair.SecretKey(hex: hexEncodedSecretKey)
return Box.KeyPair(publicKey: publicKey, secretKey: secretKey)
}
@objc public func getUser() -> Contact? {
guard let userPublicKey = getUserPublicKey() else { return nil }
var result: Contact?
Storage.read { transaction in
result = Storage.shared.getContact(with: userPublicKey)
}
return result
}
}