diff --git a/Session/Open Groups/OpenGroupSuggestionGrid.swift b/Session/Open Groups/OpenGroupSuggestionGrid.swift index 7e6581b8b..32734cc90 100644 --- a/Session/Open Groups/OpenGroupSuggestionGrid.swift +++ b/Session/Open Groups/OpenGroupSuggestionGrid.swift @@ -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 } } diff --git a/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift b/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift index 9875ef73a..692ca7875 100644 --- a/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift +++ b/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift @@ -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]] = [:] // Server URL to room ID to set of moderator IDs - private static var requestNewAuthTokenPromise: Promise? + private static var authTokenPromise: Promise? + 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] = [:] // 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 { + if let promise = groupImagePromises["\(server).\(room)"] { + return promise + } else { + let request = Request(verb: .get, room: room, server: server, endpoint: "image") + let promise: Promise = 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 + } + } }