Convert validateCredentials to async/await.

This commit is contained in:
Brent Simmons
2023-10-07 10:53:02 -07:00
parent 264db50981
commit f042c97156
11 changed files with 159 additions and 159 deletions

View File

@@ -373,16 +373,16 @@ public enum FetchType {
try CredentialsManager.removeCredentials(type: type, server: server, username: username)
}
public static func validateCredentials(transport: Transport = URLSession.webserviceTransport(), type: AccountType, credentials: Credentials, endpoint: URL? = nil, completion: @escaping (Result<Credentials?, Error>) -> Void) {
public static func validateCredentials(transport: Transport = URLSession.webserviceTransport(), type: AccountType, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
switch type {
case .feedbin:
FeedbinAccountDelegate.validateCredentials(transport: transport, credentials: credentials, completion: completion)
return try await FeedbinAccountDelegate.validateCredentials(transport: transport, credentials: credentials)
case .newsBlur:
NewsBlurAccountDelegate.validateCredentials(transport: transport, credentials: credentials, completion: completion)
return try await NewsBlurAccountDelegate.validateCredentials(transport: transport, credentials: credentials)
case .freshRSS, .inoreader, .bazQux, .theOldReader:
ReaderAPIAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, completion: completion)
return try await ReaderAPIAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint)
default:
break
return nil
}
}

View File

@@ -53,7 +53,7 @@ import Secrets
func accountWillBeDeleted(_ account: Account)
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, completion: @escaping (Result<Credentials?, Error>) -> Void)
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?) async throws -> Credentials?
/// Suspend all network activity
func suspendNetwork()

View File

@@ -612,16 +612,21 @@ public enum FeedbinAccountDelegateError: String, Error {
func accountWillBeDeleted(_ account: Account) {
}
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, completion: @escaping (Result<Credentials?, Error>) -> Void) {
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
let caller = FeedbinAPICaller(transport: transport)
caller.credentials = credentials
caller.validateCredentials() { result in
DispatchQueue.main.async {
completion(result)
return try await withCheckedThrowingContinuation { continuation in
caller.validateCredentials() { result in
switch result {
case .success(let credentials):
continuation.resume(returning: credentials)
case .failure(let error):
continuation.resume(throwing: error)
}
}
}
}
// MARK: Suspend and Resume (for iOS)

View File

@@ -205,8 +205,8 @@ final class LocalAccountDelegate: AccountDelegate, Logging {
func accountWillBeDeleted(_ account: Account) {
}
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, completion: (Result<Credentials?, Error>) -> Void) {
return completion(.success(nil))
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
nil
}
// MARK: Suspend and Resume (for iOS)

View File

@@ -649,14 +649,21 @@ final class NewsBlurAccountDelegate: AccountDelegate, Logging {
caller.logout() { _ in }
}
class func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, completion: @escaping (Result<Credentials?, Error>) -> ()) {
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
let caller = NewsBlurAPICaller(transport: transport) { url, credentials in
URLRequest(url: url, credentials: credentials)
}
caller.credentials = credentials
caller.validateCredentials() { result in
DispatchQueue.main.async {
completion(result)
return try await withCheckedThrowingContinuation { continuation in
caller.validateCredentials() { result in
switch result {
case .success(let credentials):
continuation.resume(returning: credentials)
case .failure(let error):
continuation.resume(throwing: error)
}
}
}
}

View File

@@ -660,17 +660,21 @@ public enum ReaderAPIAccountDelegateError: LocalizedError {
func accountWillBeDeleted(_ account: Account) {
}
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, completion: @escaping (Result<Credentials?, Error>) -> Void) {
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
guard let endpoint = endpoint else {
completion(.failure(TransportError.noURL))
return
throw TransportError.noURL
}
ReaderAPICaller.validateCredentials(credentials: credentials, transport: transport, endpoint: endpoint, variant: .generic) { url, credentials in
URLRequest(url: url, credentials: credentials)
} completion: { result in
Task { @MainActor in
completion(result)
return try await withCheckedThrowingContinuation { continuation in
ReaderAPICaller.validateCredentials(credentials: credentials, transport: transport, endpoint: endpoint, variant: .generic) { url, credentials in
URLRequest(url: url, credentials: credentials)
} completion: { result in
switch result {
case .success(let credentials):
continuation.resume(returning: credentials)
case .failure(let error):
continuation.resume(throwing: error)
}
}
}
}

View File

@@ -474,8 +474,8 @@ final class CloudKitAccountDelegate: AccountDelegate, Logging {
articlesZone.resetChangeToken()
}
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, completion: (Result<Credentials?, Error>) -> Void) {
return completion(.success(nil))
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
nil
}
// MARK: Suspend and Resume (for iOS)

View File

@@ -573,9 +573,9 @@ final class FeedlyAccountDelegate: AccountDelegate, Logging {
MainThreadOperationQueue.shared.add(logout)
}
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, completion: @escaping (Result<Credentials?, Error>) -> Void) {
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil) async throws -> Credentials? {
assertionFailure("An `account` instance should enqueue an \(FeedlyRefreshAccessTokenOperation.self) instead.")
completion(.success(credentials))
return credentials
}
// MARK: Suspend and Resume (for iOS)