mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.9 KiB
Swift
44 lines
1.9 KiB
Swift
5 years ago
|
|
||
|
@objc(LKDeviceLinkIndex)
|
||
|
public final class DeviceLinkIndex : NSObject {
|
||
|
|
||
|
private static let name = "loki_device_link_index"
|
||
|
|
||
|
@objc public static let masterPublicKey = "master_hex_encoded_public_key"
|
||
|
@objc public static let slavePublicKey = "slave_hex_encoded_public_key"
|
||
|
@objc public static let isAuthorized = "is_authorized"
|
||
|
|
||
|
@objc public static let indexDatabaseExtension: YapDatabaseSecondaryIndex = {
|
||
|
let setup = YapDatabaseSecondaryIndexSetup()
|
||
|
setup.addColumn(masterPublicKey, with: .text)
|
||
|
setup.addColumn(slavePublicKey, with: .text)
|
||
|
setup.addColumn(isAuthorized, with: .integer)
|
||
|
let handler = YapDatabaseSecondaryIndexHandler.withObjectBlock { _, map, _, _, object in
|
||
|
guard let deviceLink = object as? DeviceLink else { return }
|
||
|
map[masterPublicKey] = deviceLink.master.publicKey
|
||
|
map[slavePublicKey] = deviceLink.slave.publicKey
|
||
|
map[isAuthorized] = deviceLink.isAuthorized
|
||
|
}
|
||
|
return YapDatabaseSecondaryIndex(setup: setup, handler: handler)
|
||
|
}()
|
||
|
|
||
|
@objc public static let databaseExtensionName: String = name
|
||
|
|
||
|
@objc public static func asyncRegisterDatabaseExtensions(_ storage: OWSStorage) {
|
||
|
storage.asyncRegister(indexDatabaseExtension, withName: name)
|
||
|
}
|
||
|
|
||
|
@objc public static func getDeviceLinks(for query: YapDatabaseQuery, in transaction: YapDatabaseReadTransaction) -> [DeviceLink] {
|
||
|
guard let ext = transaction.ext(DeviceLinkIndex.name) as? YapDatabaseSecondaryIndexTransaction else {
|
||
|
print("[Loki] Couldn't get device link index database extension.")
|
||
|
return []
|
||
|
}
|
||
|
var result: [DeviceLink] = []
|
||
|
ext.enumerateKeysAndObjects(matching: query) { _, _, object, _ in
|
||
|
guard let deviceLink = object as? DeviceLink else { return }
|
||
|
result.append(deviceLink)
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
}
|