Added storage functions.

Minor refactor.
pull/57/head
Mikunj 6 years ago
parent cbc12977d3
commit 3c7369f465

@ -1527,7 +1527,7 @@ static NSTimeInterval launchStartedAt;
- (LKGroupChat *)lokiPublicChat
{
return [[LKGroupChat alloc] initWithServerID:LKGroupChatAPI.publicChatServerID server:LKGroupChatAPI.publicChatServer displayName:NSLocalizedString(@"Loki Public Chat", @"") isDeletable:true];
return [[LKGroupChat alloc] initWithChannel:LKGroupChatAPI.publicChatServerID server:LKGroupChatAPI.publicChatServer displayName:NSLocalizedString(@"Loki Public Chat", @"") isDeletable:true];
}
- (LKRSSFeed *)lokiNewsFeed

@ -110,7 +110,7 @@ public final class GroupChatPoller : NSObject {
}
}
// Poll
let _ = LokiGroupChatAPI.getMessages(for: group.serverID, on: group.server).done(on: .main) { messages in
let _ = LokiGroupChatAPI.getMessages(for: group.channel, on: group.server).done(on: .main) { messages in
messages.forEach { message in
if message.hexEncodedPublicKey != userHexEncodedPublicKey {
processIncomingMessage(message)
@ -123,7 +123,7 @@ public final class GroupChatPoller : NSObject {
private func pollForDeletedMessages() {
let group = self.group
let _ = LokiGroupChatAPI.getDeletedMessageServerIDs(for: group.serverID, on: group.server).done { deletedMessageServerIDs in
let _ = LokiGroupChatAPI.getDeletedMessageServerIDs(for: group.channel, on: group.server).done { deletedMessageServerIDs in
let storage = OWSPrimaryStorage.shared()
storage.dbReadWriteConnection.readWrite { transaction in
let deletedMessageIDs = deletedMessageServerIDs.compactMap { storage.getIDForMessage(withServerID: UInt($0), in: transaction) }
@ -135,6 +135,6 @@ public final class GroupChatPoller : NSObject {
}
private func pollForModerators() {
let _ = LokiGroupChatAPI.getModerators(for: group.serverID, on: group.server)
let _ = LokiGroupChatAPI.getModerators(for: group.channel, on: group.server)
}
}

@ -1,19 +1,38 @@
@objc(LKGroupChat)
public final class LokiGroupChat : NSObject {
@objc public let id: String
@objc public let serverID: UInt64
public final class LokiGroupChat : NSObject, NSCoding {
@objc public var id: String {
return "\(server).\(channel)"
}
@objc public let channel: UInt64
@objc public let server: String
@objc public let displayName: String
@objc public let isDeletable: Bool
@objc public init(serverID: UInt64, server: String, displayName: String, isDeletable: Bool) {
self.id = "\(server).\(serverID)"
self.serverID = serverID
@objc public init(channel: UInt64, server: String, displayName: String, isDeletable: Bool) {
self.channel = channel
self.server = server
self.displayName = displayName
self.isDeletable = isDeletable
}
override public var description: String { return displayName }
// MARK: Coding
@objc public init?(coder: NSCoder) {
channel = UInt64(coder.decodeInt64(forKey: "channel"))
server = coder.decodeObject(forKey: "server") as! String
displayName = coder.decodeObject(forKey: "displayName") as! String
isDeletable = coder.decodeBool(forKey: "isDeletable")
super.init()
}
@objc public func encode(with coder: NSCoder) {
coder.encode(Int64(channel), forKey: "channel")
coder.encode(server, forKey: "server")
coder.encode(displayName, forKey: "displayName")
coder.encode(isDeletable, forKey: "isDeletable")
}
override public var description: String { return "\(displayName) - \(server)" }
}

@ -24,4 +24,24 @@ public final class LokiDatabaseUtilities : NSObject {
public static func objc_getMasterHexEncodedPublicKey(for slaveHexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> String? {
return OWSPrimaryStorage.shared().getMasterHexEncodedPublicKey(for: slaveHexEncodedPublicKey, in: transaction)
}
@objc(getAllGroupChats:)
public static func objc_getAllGroupChats(in transaction: YapDatabaseReadTransaction) -> [String: LokiGroupChat] {
return OWSPrimaryStorage.shared().getAllGroupChats(in: transaction)
}
@objc(getGroupChatForThreadID:transaction:)
public static func objc_getGroupChat(for threadID: String, in transaction: YapDatabaseReadTransaction) -> LokiGroupChat? {
return OWSPrimaryStorage.shared().getGroupChat(for: threadID, in: transaction)
}
@objc(setGroupChat:threadID:transaction:)
public static func objc_setGroupChat(_ groupChat: LokiGroupChat, for threadID: String, in transaction: YapDatabaseReadWriteTransaction) {
return OWSPrimaryStorage.shared().setGroupChat(groupChat, for: threadID, in: transaction)
}
@objc(removeGroupChatForThreadID:transaction:)
public static func objc_removeGroupChat(for threadID: String, in transaction: YapDatabaseReadWriteTransaction) {
return OWSPrimaryStorage.shared().removeGroupChat(for: threadID, in: transaction)
}
}

@ -1,7 +1,10 @@
public extension OWSPrimaryStorage {
private func getCollection(for primaryDevice: String) -> String {
private var groupChatCollection: String {
return "LokiGroupChatCollection"
}
private func getDeviceLinkCollection(for primaryDevice: String) -> String {
return "LokiDeviceLinkCollection-\(primaryDevice)"
}
@ -13,23 +16,23 @@ public extension OWSPrimaryStorage {
return
}
let masterHexEncodedPublicKey = masterHexEncodedPublicKeys.first!
let collection = getCollection(for: masterHexEncodedPublicKey)
let collection = getDeviceLinkCollection(for: masterHexEncodedPublicKey)
transaction.removeAllObjects(inCollection: collection)
deviceLinks.forEach { addDeviceLink($0, in: transaction) } // TODO: Check the performance impact of this
}
public func addDeviceLink(_ deviceLink: DeviceLink, in transaction: YapDatabaseReadWriteTransaction) {
let collection = getCollection(for: deviceLink.master.hexEncodedPublicKey)
let collection = getDeviceLinkCollection(for: deviceLink.master.hexEncodedPublicKey)
transaction.setObject(deviceLink, forKey: deviceLink.slave.hexEncodedPublicKey, inCollection: collection)
}
public func removeDeviceLink(_ deviceLink: DeviceLink, in transaction: YapDatabaseReadWriteTransaction) {
let collection = getCollection(for: deviceLink.master.hexEncodedPublicKey)
let collection = getDeviceLinkCollection(for: deviceLink.master.hexEncodedPublicKey)
transaction.removeObject(forKey: deviceLink.slave.hexEncodedPublicKey, inCollection: collection)
}
public func getDeviceLinks(for masterHexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> Set<DeviceLink> {
let collection = getCollection(for: masterHexEncodedPublicKey)
let collection = getDeviceLinkCollection(for: masterHexEncodedPublicKey)
var result: Set<DeviceLink> = []
transaction.enumerateRows(inCollection: collection) { _, object, _, _ in
guard let deviceLink = object as? DeviceLink else { return }
@ -51,4 +54,26 @@ public extension OWSPrimaryStorage {
public func getMasterHexEncodedPublicKey(for slaveHexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> String? {
return getDeviceLink(for: slaveHexEncodedPublicKey, in: transaction)?.master.hexEncodedPublicKey
}
public func getAllGroupChats(in transaction: YapDatabaseReadTransaction) -> [String: LokiGroupChat] {
var dict = [String: LokiGroupChat]()
transaction.enumerateKeysAndObjects(inCollection: groupChatCollection) { (threadID, object, _) in
if let groupChat = object as? LokiGroupChat {
dict[threadID] = groupChat
}
}
return dict
}
public func getGroupChat(for threadID: String, in transaction: YapDatabaseReadTransaction) -> LokiGroupChat? {
return transaction.object(forKey: threadID, inCollection: groupChatCollection) as? LokiGroupChat
}
public func setGroupChat(_ groupChat: LokiGroupChat, for threadID: String, in transaction: YapDatabaseReadWriteTransaction) {
transaction.setObject(groupChat, forKey: threadID, inCollection: groupChatCollection)
}
public func removeGroupChat(for threadID: String, in transaction: YapDatabaseReadWriteTransaction) {
transaction.removeObject(forKey: threadID, inCollection: groupChatCollection)
}
}

Loading…
Cancel
Save