session-ios/SessionMessagingKit/Database/Storage+OpenGroups.swift

210 lines
9.3 KiB
Swift
Raw Normal View History

2020-11-12 22:41:54 +01:00
2020-11-19 05:24:09 +01:00
extension Storage {
2020-11-17 06:23:13 +01:00
2020-11-19 05:24:09 +01:00
// MARK: - Open Groups
2021-03-24 02:37:33 +01:00
private static let openGroupCollection = "SNOpenGroupCollection"
2020-11-19 05:24:09 +01:00
2021-03-24 02:37:33 +01:00
@objc public func getAllV2OpenGroups() -> [String:OpenGroupV2] {
var result = [String:OpenGroupV2]()
2020-11-12 22:41:54 +01:00
Storage.read { transaction in
2020-11-19 05:24:09 +01:00
transaction.enumerateKeysAndObjects(inCollection: Storage.openGroupCollection) { threadID, object, _ in
2021-03-24 02:37:33 +01:00
guard let openGroup = object as? OpenGroupV2 else { return }
2020-11-19 05:24:09 +01:00
result[threadID] = openGroup
}
2020-11-12 22:41:54 +01:00
}
return result
}
2021-03-24 02:37:33 +01:00
@objc(getV2OpenGroupForThreadID:)
public func getV2OpenGroup(for threadID: String) -> OpenGroupV2? {
var result: OpenGroupV2?
2020-11-12 22:41:54 +01:00
Storage.read { transaction in
2021-03-24 02:37:33 +01:00
result = transaction.object(forKey: threadID, inCollection: Storage.openGroupCollection) as? OpenGroupV2
2020-11-12 22:41:54 +01:00
}
return result
}
2020-11-30 01:00:28 +01:00
2021-03-24 02:37:33 +01:00
public func v2GetThreadID(for v2OpenGroupID: String) -> String? {
2020-11-30 01:00:28 +01:00
var result: String?
Storage.read { transaction in
transaction.enumerateKeysAndObjects(inCollection: Storage.openGroupCollection, using: { threadID, object, stop in
2021-03-24 02:37:33 +01:00
guard let openGroup = object as? OpenGroupV2, openGroup.id == v2OpenGroupID else { return }
2020-11-30 01:00:28 +01:00
result = threadID
stop.pointee = true
})
}
return result
}
2020-11-12 22:41:54 +01:00
2021-03-24 02:37:33 +01:00
@objc(setV2OpenGroup:forThreadWithID:using:)
public func setV2OpenGroup(_ openGroup: OpenGroupV2, for threadID: String, using transaction: Any) {
2020-11-19 05:24:09 +01:00
(transaction as! YapDatabaseReadWriteTransaction).setObject(openGroup, forKey: threadID, inCollection: Storage.openGroupCollection)
2020-11-17 06:23:13 +01:00
}
2021-03-24 02:37:33 +01:00
@objc(removeV2OpenGroupForThreadID:using:)
public func removeV2OpenGroup(for threadID: String, using transaction: Any) {
2020-11-19 05:24:09 +01:00
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: threadID, inCollection: Storage.openGroupCollection)
2020-11-17 06:23:13 +01:00
}
2020-11-19 05:24:09 +01:00
2020-11-17 06:23:13 +01:00
// MARK: - Authorization
2021-03-24 01:12:08 +01:00
private static let authTokenCollection = "SNAuthTokenCollection"
2020-11-12 22:41:54 +01:00
2021-03-24 01:12:08 +01:00
public func getAuthToken(for room: String, on server: String) -> String? {
let collection = Storage.authTokenCollection
let key = "\(server).\(room)"
2020-11-12 22:41:54 +01:00
var result: String? = nil
Storage.read { transaction in
2021-03-24 01:12:08 +01:00
result = transaction.object(forKey: key, inCollection: collection) as? String
2020-11-12 22:41:54 +01:00
}
return result
}
2021-03-24 01:12:08 +01:00
public func setAuthToken(for room: String, on server: String, to newValue: String, using transaction: Any) {
let collection = Storage.authTokenCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
2021-03-24 01:12:08 +01:00
public func removeAuthToken(for room: String, on server: String, using transaction: Any) {
let collection = Storage.authTokenCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
2020-11-17 06:23:13 +01:00
2020-11-19 05:24:09 +01:00
// MARK: - Public Keys
2020-11-17 06:23:13 +01:00
2020-11-12 22:41:54 +01:00
private static let openGroupPublicKeyCollection = "LokiOpenGroupPublicKeyCollection"
public func getOpenGroupPublicKey(for server: String) -> String? {
var result: String? = nil
Storage.read { transaction in
result = transaction.object(forKey: server, inCollection: Storage.openGroupPublicKeyCollection) as? String
}
return result
}
public func setOpenGroupPublicKey(for server: String, to newValue: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: server, inCollection: Storage.openGroupPublicKeyCollection)
}
2020-11-19 05:24:09 +01:00
public func removeOpenGroupPublicKey(for server: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: server, inCollection: Storage.openGroupPublicKeyCollection)
}
2020-11-17 06:23:13 +01:00
// MARK: - Last Message Server ID
public static let lastMessageServerIDCollection = "SNLastMessageServerIDCollection"
2020-11-12 22:41:54 +01:00
public func getLastMessageServerID(for room: String, on server: String) -> Int64? {
let collection = Storage.lastMessageServerIDCollection
let key = "\(server).\(room)"
var result: Int64? = nil
2020-11-12 22:41:54 +01:00
Storage.read { transaction in
result = transaction.object(forKey: key, inCollection: collection) as? Int64
2020-11-12 22:41:54 +01:00
}
return result
}
public func setLastMessageServerID(for room: String, on server: String, to newValue: Int64, using transaction: Any) {
let collection = Storage.lastMessageServerIDCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
public func removeLastMessageServerID(for room: String, on server: String, using transaction: Any) {
let collection = Storage.lastMessageServerIDCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
2020-11-17 06:23:13 +01:00
// MARK: - Last Deletion Server ID
public static let lastDeletionServerIDCollection = "SNLastDeletionServerIDCollection"
2020-11-12 22:41:54 +01:00
public func getLastDeletionServerID(for room: String, on server: String) -> Int64? {
let collection = Storage.lastDeletionServerIDCollection
let key = "\(server).\(room)"
var result: Int64? = nil
2020-11-12 22:41:54 +01:00
Storage.read { transaction in
result = transaction.object(forKey: key, inCollection: collection) as? Int64
2020-11-12 22:41:54 +01:00
}
return result
}
public func setLastDeletionServerID(for room: String, on server: String, to newValue: Int64, using transaction: Any) {
let collection = Storage.lastDeletionServerIDCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
public func removeLastDeletionServerID(for room: String, on server: String, using transaction: Any) {
let collection = Storage.lastDeletionServerIDCollection
let key = "\(server).\(room)"
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: key, inCollection: collection)
2020-11-12 22:41:54 +01:00
}
// MARK: - OpenGroupServerIdToUniqueIdLookup
public static let openGroupServerIdToUniqueIdLookupCollection = "SNOpenGroupServerIdToUniqueIdLookup"
public func getOpenGroupServerIdLookup(_ serverId: UInt64, in room: String, on server: String, using transaction: YapDatabaseReadTransaction) -> OpenGroupServerIdLookup? {
let key: String = OpenGroupServerIdLookup.id(serverId: serverId, in: room, on: server)
return transaction.object(forKey: key, inCollection: Storage.openGroupServerIdToUniqueIdLookupCollection) as? OpenGroupServerIdLookup
}
2020-11-12 22:41:54 +01:00
public func addOpenGroupServerIdLookup(_ serverId: UInt64?, tsMessageId: String?, in room: String, on server: String, using transaction: YapDatabaseReadWriteTransaction) {
guard let serverId: UInt64 = serverId, let tsMessageId: String = tsMessageId else { return }
let lookup: OpenGroupServerIdLookup = OpenGroupServerIdLookup(server: server, room: room, serverId: serverId, tsMessageId: tsMessageId)
addOpenGroupServerIdLookup(lookup, using: transaction)
}
public func addOpenGroupServerIdLookup(_ lookup: OpenGroupServerIdLookup, using transaction: YapDatabaseReadWriteTransaction) {
transaction.setObject(lookup, forKey: lookup.id, inCollection: Storage.openGroupServerIdToUniqueIdLookupCollection)
}
2020-11-17 06:23:13 +01:00
public func removeOpenGroupServerIdLookup(_ serverId: UInt64, in room: String, on server: String, using transaction: YapDatabaseReadWriteTransaction) {
let key: String = OpenGroupServerIdLookup.id(serverId: serverId, in: room, on: server)
transaction.removeObject(forKey: key, inCollection: Storage.openGroupServerIdToUniqueIdLookupCollection)
}
2020-11-17 06:23:13 +01:00
2020-11-19 05:24:09 +01:00
// MARK: - Metadata
2020-11-17 06:23:13 +01:00
2021-03-24 05:12:58 +01:00
private static let openGroupUserCountCollection = "SNOpenGroupUserCountCollection"
2021-03-30 00:54:40 +02:00
private static let openGroupImageCollection = "SNOpenGroupImageCollection"
2021-03-24 05:12:58 +01:00
public func getUserCount(forV2OpenGroupWithID openGroupID: String) -> UInt64? {
var result: UInt64?
2020-11-19 05:24:09 +01:00
Storage.read { transaction in
2021-03-24 05:12:58 +01:00
result = transaction.object(forKey: openGroupID, inCollection: Storage.openGroupUserCountCollection) as? UInt64
2020-11-19 05:24:09 +01:00
}
return result
}
2021-03-24 05:12:58 +01:00
public func setUserCount(to newValue: UInt64, forV2OpenGroupWithID openGroupID: String, using transaction: Any) {
2020-11-12 22:41:54 +01:00
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: openGroupID, inCollection: Storage.openGroupUserCountCollection)
}
2021-01-21 01:27:52 +01:00
2021-03-30 00:54:40 +02:00
public func getOpenGroupImage(for room: String, on server: String) -> Data? {
var result: Data?
2020-11-19 05:24:09 +01:00
Storage.read { transaction in
2021-03-30 00:54:40 +02:00
result = transaction.object(forKey: "\(server).\(room)", inCollection: Storage.openGroupImageCollection) as? Data
}
2020-11-19 05:24:09 +01:00
return result
}
2021-03-30 00:54:40 +02:00
public func setOpenGroupImage(to data: Data, for room: String, on server: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).setObject(data, forKey: "\(server).\(room)", inCollection: Storage.openGroupImageCollection)
2020-11-18 05:36:51 +01:00
}
2020-11-12 22:41:54 +01:00
}