Actually set open group images

pull/376/head
Niels Andriesse 5 years ago
parent c42a694ef6
commit 2dab160599

@ -33,17 +33,22 @@ public final class OpenGroupManagerV2 : NSObject {
// MARK: Adding & Removing // MARK: Adding & Removing
public func add(room: String, server: String, publicKey: String, using transaction: Any) -> Promise<Void> { public func add(room: String, server: String, publicKey: String, using transaction: Any) -> Promise<Void> {
let storage = Storage.shared let storage = Storage.shared
// Clear any existing data if needed
storage.removeLastMessageServerID(for: room, on: server, using: transaction) storage.removeLastMessageServerID(for: room, on: server, using: transaction)
storage.removeLastDeletionServerID(for: room, on: server, using: transaction) storage.removeLastDeletionServerID(for: room, on: server, using: transaction)
storage.removeAuthToken(for: room, on: server, using: transaction) storage.removeAuthToken(for: room, on: server, using: transaction)
// Store the public key
storage.setOpenGroupPublicKey(for: server, to: publicKey, using: transaction) storage.setOpenGroupPublicKey(for: server, to: publicKey, using: transaction)
let (promise, seal) = Promise<Void>.pending() let (promise, seal) = Promise<Void>.pending()
let transaction = transaction as! YapDatabaseReadWriteTransaction let transaction = transaction as! YapDatabaseReadWriteTransaction
transaction.addCompletionQueue(DispatchQueue.global(qos: .default)) { transaction.addCompletionQueue(DispatchQueue.global(qos: .userInitiated)) {
OpenGroupAPIV2.getInfo(for: room, on: server).done(on: DispatchQueue.global(qos: .default)) { info in // Get the group info
OpenGroupAPIV2.getInfo(for: room, on: server).done(on: DispatchQueue.global(qos: .userInitiated)) { info in
// Create the open group model and the thread
let openGroup = OpenGroupV2(server: server, room: room, name: info.name, publicKey: publicKey, imageID: info.imageID) let openGroup = OpenGroupV2(server: server, room: room, name: info.name, publicKey: publicKey, imageID: info.imageID)
let groupID = LKGroupUtilities.getEncodedOpenGroupIDAsData(openGroup.id) let groupID = LKGroupUtilities.getEncodedOpenGroupIDAsData(openGroup.id)
let model = TSGroupModel(title: openGroup.name, memberIds: [ getUserHexEncodedPublicKey() ], image: nil, groupId: groupID, groupType: .openGroup, adminIds: []) let model = TSGroupModel(title: openGroup.name, memberIds: [ getUserHexEncodedPublicKey() ], image: nil, groupId: groupID, groupType: .openGroup, adminIds: [])
// Store everything
storage.write(with: { transaction in storage.write(with: { transaction in
let transaction = transaction as! YapDatabaseReadWriteTransaction let transaction = transaction as! YapDatabaseReadWriteTransaction
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction) let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
@ -51,16 +56,29 @@ public final class OpenGroupManagerV2 : NSObject {
thread.save(with: transaction) thread.save(with: transaction)
storage.setV2OpenGroup(openGroup, for: thread.uniqueId!, using: transaction) storage.setV2OpenGroup(openGroup, for: thread.uniqueId!, using: transaction)
}, completion: { }, completion: {
// Stop any existing poller if needed
if let poller = OpenGroupManagerV2.shared.pollers[openGroup.id] { if let poller = OpenGroupManagerV2.shared.pollers[openGroup.id] {
poller.stop() poller.stop()
OpenGroupManagerV2.shared.pollers[openGroup.id] = nil OpenGroupManagerV2.shared.pollers[openGroup.id] = nil
} }
// Start the poller
let poller = OpenGroupPollerV2(for: openGroup) let poller = OpenGroupPollerV2(for: openGroup)
poller.startIfNeeded() poller.startIfNeeded()
OpenGroupManagerV2.shared.pollers[openGroup.id] = poller OpenGroupManagerV2.shared.pollers[openGroup.id] = poller
// Fetch the group image
OpenGroupAPIV2.getGroupImage(for: room, on: server).done(on: DispatchQueue.global(qos: .userInitiated)) { data in
storage.write { transaction in
// Update the thread
let transaction = transaction as! YapDatabaseReadWriteTransaction
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
thread.groupModel.groupImage = UIImage(data: data)
thread.save(with: transaction)
}
}.retainUntilComplete()
// Finish
seal.fulfill(()) seal.fulfill(())
}) })
}.catch(on: DispatchQueue.global(qos: .default)) { error in }.catch(on: DispatchQueue.global(qos: .userInitiated)) { error in
seal.reject(error) seal.reject(error)
} }
} }
@ -68,10 +86,12 @@ public final class OpenGroupManagerV2 : NSObject {
} }
public func delete(_ openGroup: OpenGroupV2, associatedWith thread: TSThread, using transaction: YapDatabaseReadWriteTransaction) { public func delete(_ openGroup: OpenGroupV2, associatedWith thread: TSThread, using transaction: YapDatabaseReadWriteTransaction) {
// Stop the poller if needed
if let poller = pollers[openGroup.id] { if let poller = pollers[openGroup.id] {
poller.stop() poller.stop()
pollers[openGroup.id] = nil pollers[openGroup.id] = nil
} }
// Remove all data
var messageIDs: Set<String> = [] var messageIDs: Set<String> = []
var messageTimestamps: Set<UInt64> = [] var messageTimestamps: Set<UInt64> = []
thread.enumerateInteractions(with: transaction) { interaction, _ in thread.enumerateInteractions(with: transaction) { interaction, _ in

Loading…
Cancel
Save