Add group image endpoint

pull/376/head
Niels Andriesse 3 years ago
parent 1e9b1520e1
commit 50ab253576

@ -59,7 +59,7 @@ final class OpenGroupSuggestionGrid : UIView, UICollectionViewDataSource, UIColl
spinner.startAnimating()
heightConstraint = set(.height, to: 40)
widthAnchor.constraint(greaterThanOrEqualToConstant: 40).isActive = true
let _ = OpenGroupAPIV2.getDefaultRoomsPromise?.done { [weak self] rooms in
let _ = OpenGroupAPIV2.defaultRoomsPromise?.done { [weak self] rooms in
self?.rooms = rooms
}
}

@ -1,15 +1,15 @@
import PromiseKit
import SessionSnodeKit
// TODO: Show images w/ room suggestions
@objc(SNOpenGroupAPIV2)
public final class OpenGroupAPIV2 : NSObject {
private static var moderators: [String:[String:Set<String>]] = [:] // Server URL to room ID to set of moderator IDs
private static var requestNewAuthTokenPromise: Promise<String>?
private static var authTokenPromise: Promise<String>?
public static let defaultServer = "https://sessionopengroup.com"
public static let defaultServerPublicKey = "658d29b91892a2389505596b135e76a53db6e11d613a51dbd3d0816adffb231b"
public static var getDefaultRoomsPromise: Promise<[Info]>?
public static var defaultRoomsPromise: Promise<[Info]>?
public static var groupImagePromises: [String:Promise<Data>] = [:]
// MARK: Error
public enum Error : LocalizedError {
@ -125,8 +125,8 @@ public final class OpenGroupAPIV2 : NSObject {
if let authToken = storage.getAuthToken(for: room, on: server) {
return Promise.value(authToken)
} else {
if let requestNewAuthTokenPromise = requestNewAuthTokenPromise {
return requestNewAuthTokenPromise
if let authTokenPromise = authTokenPromise {
return authTokenPromise
} else {
let promise = requestNewAuthToken(for: room, on: server)
.then(on: DispatchQueue.global(qos: .userInitiated)) { claimAuthToken($0, for: room, on: server) }
@ -140,11 +140,11 @@ public final class OpenGroupAPIV2 : NSObject {
return promise
}
promise.done(on: DispatchQueue.global(qos: .userInitiated)) { _ in
requestNewAuthTokenPromise = nil
authTokenPromise = nil
}.catch(on: DispatchQueue.global(qos: .userInitiated)) { _ in
requestNewAuthTokenPromise = nil
authTokenPromise = nil
}
requestNewAuthTokenPromise = promise
authTokenPromise = promise
return promise
}
}
@ -322,7 +322,7 @@ public final class OpenGroupAPIV2 : NSObject {
Storage.shared.write(with: { transaction in
Storage.shared.setOpenGroupPublicKey(for: defaultServer, to: defaultServerPublicKey, using: transaction)
}, completion: {
getDefaultRoomsPromise = attempt(maxRetryCount: 8, recoveringOn: DispatchQueue.main) {
defaultRoomsPromise = attempt(maxRetryCount: 8, recoveringOn: DispatchQueue.main) {
OpenGroupAPIV2.getAllRooms(from: defaultServer)
}
})
@ -365,4 +365,18 @@ public final class OpenGroupAPIV2 : NSObject {
return memberCount
}
}
public static func getGroupImage(for room: String, on server: String) -> Promise<Data> {
if let promise = groupImagePromises["\(server).\(room)"] {
return promise
} else {
let request = Request(verb: .get, room: room, server: server, endpoint: "image")
let promise: Promise<Data> = send(request).map(on: DispatchQueue.global(qos: .userInitiated)) { json in
guard let base64EncodedFile = json["result"] as? String, let file = Data(base64Encoded: base64EncodedFile) else { throw Error.parsingFailed }
return file
}
groupImagePromises["\(server).\(room)"] = promise
return promise
}
}
}

Loading…
Cancel
Save