|
|
@ -48,43 +48,43 @@ public final class PublicChatManager : NSObject {
|
|
|
|
isPolling = false
|
|
|
|
isPolling = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public func addChat(server: String, channel: UInt64) -> Promise<OpenGroup> {
|
|
|
|
public func addChat(server: String, channel: UInt64, using transaction: YapDatabaseReadWriteTransaction) -> Promise<OpenGroup> {
|
|
|
|
if let existingChat = getChat(server: server, channel: channel) {
|
|
|
|
if let existingChat = getChat(server: server, channel: channel) {
|
|
|
|
if let newChat = self.addChat(server: server, channel: channel, name: existingChat.displayName) {
|
|
|
|
if let newChat = self.addChat(server: server, channel: channel, name: existingChat.displayName, using: transaction) {
|
|
|
|
return Promise.value(newChat)
|
|
|
|
return Promise.value(newChat)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return Promise(error: Error.chatCreationFailed)
|
|
|
|
return Promise(error: Error.chatCreationFailed)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return OpenGroupAPI.getInfo(for: channel, on: server).map2 { channelInfo -> OpenGroup in
|
|
|
|
return OpenGroupAPI.getInfo(for: channel, on: server).map2 { channelInfo -> OpenGroup in
|
|
|
|
guard let chat = self.addChat(server: server, channel: channel, name: channelInfo.displayName) else { throw Error.chatCreationFailed }
|
|
|
|
guard let chat = self.addChat(server: server, channel: channel, name: channelInfo.displayName, using: transaction) else { throw Error.chatCreationFailed }
|
|
|
|
return chat
|
|
|
|
return chat
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@discardableResult
|
|
|
|
@discardableResult
|
|
|
|
@objc(addChatWithServer:channel:name:)
|
|
|
|
@objc(addChatWithServer:channel:name:using:)
|
|
|
|
public func addChat(server: String, channel: UInt64, name: String) -> OpenGroup? {
|
|
|
|
public func addChat(server: String, channel: UInt64, name: String, using transaction: YapDatabaseReadWriteTransaction) -> OpenGroup? {
|
|
|
|
guard let chat = OpenGroup(channel: channel, server: server, displayName: name, isDeletable: true) else { return nil }
|
|
|
|
guard let chat = OpenGroup(channel: channel, server: server, displayName: name, isDeletable: true) else { return nil }
|
|
|
|
let model = TSGroupModel(title: chat.displayName, memberIds: [userHexEncodedPublicKey!, chat.server], image: nil, groupId: LKGroupUtilities.getEncodedOpenGroupIDAsData(chat.id), groupType: .openGroup, adminIds: [])
|
|
|
|
let model = TSGroupModel(title: chat.displayName, memberIds: [userHexEncodedPublicKey!, chat.server], image: nil, groupId: LKGroupUtilities.getEncodedOpenGroupIDAsData(chat.id), groupType: .openGroup, adminIds: [])
|
|
|
|
|
|
|
|
|
|
|
|
// Store the group chat mapping
|
|
|
|
// Store the group chat mapping
|
|
|
|
Storage.writeSync { transaction in
|
|
|
|
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
|
|
|
|
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
|
|
|
|
|
|
|
|
|
|
|
|
// Save the group chat
|
|
|
|
// Save the group chat
|
|
|
|
Storage.shared.setOpenGroup(chat, for: thread.uniqueId!, using: transaction)
|
|
|
|
Storage.shared.setOpenGroup(chat, for: thread.uniqueId!, using: transaction)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Update chats and pollers
|
|
|
|
// Update chats and pollers
|
|
|
|
self.refreshChatsAndPollers()
|
|
|
|
transaction.addCompletionQueue(DispatchQueue.main) {
|
|
|
|
|
|
|
|
self.refreshChatsAndPollers()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return chat
|
|
|
|
return chat
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@objc(addChatWithServer:channel:)
|
|
|
|
@objc(addChatWithServer:channel:using:)
|
|
|
|
public func objc_addChat(server: String, channel: UInt64) -> AnyPromise {
|
|
|
|
public func objc_addChat(server: String, channel: UInt64, using transaction: YapDatabaseReadWriteTransaction) -> AnyPromise {
|
|
|
|
return AnyPromise.from(addChat(server: server, channel: channel))
|
|
|
|
return AnyPromise.from(addChat(server: server, channel: channel, using: transaction))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@objc func refreshChatsAndPollers() {
|
|
|
|
@objc func refreshChatsAndPollers() {
|
|
|
|