Fix duplicate request bug

pull/112/head
Niels Andriesse 5 years ago
parent dc04b48344
commit 814d599dcc

@ -3,6 +3,7 @@ import SignalMetadataKit
/// Base class for `LokiFileServerAPI` and `LokiPublicChatAPI`.
public class LokiDotNetAPI : NSObject {
public static var getAuthTokenPromises: [String:Promise<String>] = [:]
// MARK: Convenience
internal static let storage = OWSPrimaryStorage.shared()
@ -42,6 +43,23 @@ public class LokiDotNetAPI : NSObject {
}
}
internal static func getAuthToken(for server: String, in transaction: YapDatabaseReadWriteTransaction? = nil) -> Promise<String> {
if let promise = getAuthTokenPromises[server] { return promise }
if let token = getAuthTokenFromDatabase(for: server, in: transaction) {
return Promise.value(token)
} else {
let promise = requestNewAuthToken(for: server).then(on: DispatchQueue.global()) { submitAuthToken($0, for: server) }.map { token -> String in
setAuthToken(for: server, to: token, in: transaction)
return token
}
promise.done { _ in
getAuthTokenPromises[server] = nil
}
getAuthTokenPromises[server] = promise
return promise
}
}
private static func setAuthToken(for server: String, to newValue: String, in transaction: YapDatabaseReadWriteTransaction? = nil) {
func setAuthTokenInternal(in transaction: YapDatabaseReadWriteTransaction) {
transaction.setObject(newValue, forKey: server, inCollection: authTokenCollection)
@ -160,18 +178,6 @@ public class LokiDotNetAPI : NSObject {
}
}
// MARK: Internal API
internal static func getAuthToken(for server: String, in transaction: YapDatabaseReadWriteTransaction? = nil) -> Promise<String> {
if let token = getAuthTokenFromDatabase(for: server, in: transaction) {
return Promise.value(token)
} else {
return requestNewAuthToken(for: server).then(on: DispatchQueue.global()) { submitAuthToken($0, for: server) }.map { token -> String in
setAuthToken(for: server, to: token, in: transaction)
return token
}
}
}
// MARK: Private API
private static func requestNewAuthToken(for server: String) -> Promise<String> {
print("[Loki] Requesting auth token for server: \(server).")

Loading…
Cancel
Save