Fix duplicate request bug

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

@ -3,7 +3,8 @@ 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()
internal static let userKeyPair = OWSIdentityManager.shared().identityKeyPair()!
@ -41,6 +42,23 @@ public class LokiDotNetAPI : NSObject {
return result
}
}
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) {
@ -159,18 +177,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> {

Loading…
Cancel
Save