session-ios/SessionMessagingKit/Database/Storage+OpenGroups.swift
Morgan Pretty b655882cbd Started resolving TODOs
Added some new properties to the OpenGroupV2
Moved a number of methods and variables from OpenGroupAPI to OpenGroupManager (anything doing actual logic)
Moved the message signing into the OpenGroupAPI (since that's the only place it happens)
Renamed remaining old model classes to start with 'Legacy' to make clean up easier
Updated the OpenGroupAPI poll method to use the same logic as it previously did to determine if it should retrieve recent messages or messages since the last one
2022-02-16 10:31:08 +11:00

198 lines
8.2 KiB
Swift

public protocol SessionMessagingKitOpenGroupStorageProtocol {
func getOpenGroupImage(for room: String, on server: String) -> Data?
func setOpenGroupImage(to data: Data, for room: String, on server: String, using transaction: Any)
func getV2OpenGroup(for threadID: String) -> OpenGroupV2?
func setV2OpenGroup(_ openGroup: OpenGroupV2, for threadID: String, using transaction: Any)
func getUserCount(forV2OpenGroupWithID openGroupID: String) -> UInt64?
func setUserCount(to newValue: UInt64, forV2OpenGroupWithID openGroupID: String, using transaction: Any)
}
extension Storage: SessionMessagingKitOpenGroupStorageProtocol {
// MARK: - Open Groups
private static let openGroupCollection = "SNOpenGroupCollection"
@objc public func getAllV2OpenGroups() -> [String:OpenGroupV2] {
var result = [String:OpenGroupV2]()
Storage.read { transaction in
transaction.enumerateKeysAndObjects(inCollection: Storage.openGroupCollection) { threadID, object, _ in
guard let openGroup = object as? OpenGroupV2 else { return }
result[threadID] = openGroup
}
}
return result
}
@objc(getV2OpenGroupForThreadID:)
public func getV2OpenGroup(for threadID: String) -> OpenGroupV2? {
var result: OpenGroupV2?
Storage.read { transaction in
result = transaction.object(forKey: threadID, inCollection: Storage.openGroupCollection) as? OpenGroupV2
}
return result
}
public func v2GetThreadID(for v2OpenGroupID: String) -> String? {
var result: String?
Storage.read { transaction in
transaction.enumerateKeysAndObjects(inCollection: Storage.openGroupCollection, using: { threadID, object, stop in
guard let openGroup = object as? OpenGroupV2, openGroup.id == v2OpenGroupID else { return }
result = threadID
stop.pointee = true
})
}
return result
}
@objc(setV2OpenGroup:forThreadWithID:using:)
public func setV2OpenGroup(_ openGroup: OpenGroupV2, for threadID: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).setObject(openGroup, forKey: threadID, inCollection: Storage.openGroupCollection)
}
@objc(removeV2OpenGroupForThreadID:using:)
public func removeV2OpenGroup(for threadID: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: threadID, inCollection: Storage.openGroupCollection)
}
// MARK: - Authorization
private static let authTokenCollection = "SNAuthTokenCollection"
public func getAuthToken(for room: String, on server: String) -> String? {
let collection = Storage.authTokenCollection
let key = "\(server).\(room)"
var result: String? = nil
Storage.read { transaction in
result = transaction.object(forKey: key, inCollection: collection) as? String
}
return result
}
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)
}
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)
}
// MARK: - Public Keys
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)
}
public func removeOpenGroupPublicKey(for server: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).removeObject(forKey: server, inCollection: Storage.openGroupPublicKeyCollection)
}
// MARK: - Last Message Server ID
public static let lastMessageServerIDCollection = "SNLastMessageServerIDCollection"
public func getLastMessageServerID(for room: String, on server: String) -> Int64? {
let collection = Storage.lastMessageServerIDCollection
let key = "\(server).\(room)"
var result: Int64? = nil
Storage.read { transaction in
result = transaction.object(forKey: key, inCollection: collection) as? Int64
}
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)
}
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)
}
// MARK: - Last Deletion Server ID
public static let lastDeletionServerIDCollection = "SNLastDeletionServerIDCollection"
public func getLastDeletionServerID(for room: String, on server: String) -> Int64? {
let collection = Storage.lastDeletionServerIDCollection
let key = "\(server).\(room)"
var result: Int64? = nil
Storage.read { transaction in
result = transaction.object(forKey: key, inCollection: collection) as? Int64
}
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)
}
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)
}
// MARK: - Metadata
private static let openGroupUserCountCollection = "SNOpenGroupUserCountCollection"
private static let openGroupImageCollection = "SNOpenGroupImageCollection"
public func getUserCount(forV2OpenGroupWithID openGroupID: String) -> UInt64? {
var result: UInt64?
Storage.read { transaction in
result = transaction.object(forKey: openGroupID, inCollection: Storage.openGroupUserCountCollection) as? UInt64
}
return result
}
public func setUserCount(to newValue: UInt64, forV2OpenGroupWithID openGroupID: String, using transaction: Any) {
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: openGroupID, inCollection: Storage.openGroupUserCountCollection)
}
public func getOpenGroupImage(for room: String, on server: String) -> Data? {
var result: Data?
Storage.read { transaction in
result = transaction.object(forKey: "\(server).\(room)", inCollection: Storage.openGroupImageCollection) as? Data
}
return result
}
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)
}
}