Add get room info endpoint

pull/370/head
Niels Andriesse 5 years ago
parent 717fe32a73
commit 6a8c717d7b

@ -57,6 +57,12 @@ public final class OpenGroupAPIV2 : NSObject {
self.useOnionRouting = useOnionRouting
}
}
// MARK: Info
public struct Info {
public let name: String
public let imageID: String
}
// MARK: Convenience
private static func send(_ request: Request) -> Promise<JSON> {
@ -267,6 +273,14 @@ public final class OpenGroupAPIV2 : NSObject {
}
// MARK: General
public static func getInfo(for room: String, on server: String) -> Promise<Info> {
let request = Request(verb: .get, room: room, server: server, endpoint: "rooms/\(room)")
return send(request).map(on: DispatchQueue.global(qos: .userInitiated)) { json in
guard let name = json["name"] as? String, let imageID = json["image_id"] as? String else { throw Error.parsingFailed }
return Info(name: name, imageID: imageID)
}
}
public static func getMemberCount(for room: String, on server: String) -> Promise<UInt> {
let request = Request(verb: .get, room: room, server: server, endpoint: "member_count")
return send(request).map(on: DispatchQueue.global(qos: .userInitiated)) { json in

@ -29,28 +29,35 @@ public final class OpenGroupManagerV2 : NSObject {
}
// MARK: Adding & Removing
public func add(room: String, server: String, name: String, using transaction: Any) {
public func add(room: String, server: String, publicKey: String, using transaction: Any) -> Promise<Void> {
let storage = Storage.shared
storage.removeLastMessageServerID(for: room, on: server, using: transaction)
storage.removeLastDeletionServerID(for: room, on: server, using: transaction)
let openGroup = OpenGroupV2(server: server, room: room, name: name)
let groupID = LKGroupUtilities.getEncodedOpenGroupIDAsData(openGroup.id)
let model = TSGroupModel(title: openGroup.name, memberIds: [ getUserHexEncodedPublicKey() ], image: nil, groupId: groupID, groupType: .openGroup, adminIds: [])
storage.write(with: { transaction in
let transaction = transaction as! YapDatabaseReadWriteTransaction
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
thread.shouldThreadBeVisible = true
thread.save(with: transaction)
storage.setV2OpenGroup(openGroup, for: thread.uniqueId!, using: transaction)
}, completion: {
if let poller = OpenGroupManagerV2.shared.pollers[openGroup.id] {
poller.stop()
OpenGroupManagerV2.shared.pollers[openGroup.id] = nil
}
let poller = OpenGroupPollerV2(for: openGroup)
poller.startIfNeeded()
OpenGroupManagerV2.shared.pollers[openGroup.id] = poller
})
let (promise, seal) = Promise<Void>.pending()
OpenGroupAPIV2.getInfo(for: room, on: server).done(on: DispatchQueue.global(qos: .default)) { info in
let openGroup = OpenGroupV2(server: server, room: room, name: info.name, imageID: info.imageID)
let groupID = LKGroupUtilities.getEncodedOpenGroupIDAsData(openGroup.id)
let model = TSGroupModel(title: openGroup.name, memberIds: [ getUserHexEncodedPublicKey() ], image: nil, groupId: groupID, groupType: .openGroup, adminIds: [])
storage.write(with: { transaction in
let transaction = transaction as! YapDatabaseReadWriteTransaction
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
thread.shouldThreadBeVisible = true
thread.save(with: transaction)
storage.setV2OpenGroup(openGroup, for: thread.uniqueId!, using: transaction)
}, completion: {
if let poller = OpenGroupManagerV2.shared.pollers[openGroup.id] {
poller.stop()
OpenGroupManagerV2.shared.pollers[openGroup.id] = nil
}
let poller = OpenGroupPollerV2(for: openGroup)
poller.startIfNeeded()
OpenGroupManagerV2.shared.pollers[openGroup.id] = poller
seal.fulfill(())
})
}.catch(on: DispatchQueue.global(qos: .default)) { error in
seal.reject(error)
}
return promise
}
public func delete(_ openGroup: OpenGroupV2, associatedWith thread: TSThread, using transaction: YapDatabaseReadWriteTransaction) {

@ -5,12 +5,14 @@ public final class OpenGroupV2 : NSObject, NSCoding { // NSObject/NSCoding confo
@objc public let room: String
public let id: String
public let name: String
public let imageID: String
public init(server: String, room: String, name: String) {
public init(server: String, room: String, name: String, imageID: String) {
self.server = server.lowercased()
self.room = room
self.id = "\(server).\(room)"
self.name = name
self.imageID = imageID
}
// MARK: Coding
@ -19,6 +21,7 @@ public final class OpenGroupV2 : NSObject, NSCoding { // NSObject/NSCoding confo
room = coder.decodeObject(forKey: "room") as! String
self.id = "\(server).\(room)"
name = coder.decodeObject(forKey: "name") as! String
imageID = coder.decodeObject(forKey: "imageID") as! String
super.init()
}
@ -26,7 +29,8 @@ public final class OpenGroupV2 : NSObject, NSCoding { // NSObject/NSCoding confo
coder.encode(server, forKey: "server")
coder.encode(room, forKey: "room")
coder.encode(name, forKey: "name")
coder.encode(imageID, forKey: "imageID")
}
override public var description: String { "\(name) (\(server) \(room)" }
override public var description: String { "\(name) (Server: \(server), Room: \(room)" }
}

Loading…
Cancel
Save