Convert validateCredentials to async await.
This commit is contained in:
parent
c68738bf64
commit
8eb5a02849
|
@ -358,15 +358,34 @@ public enum FetchType {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func validateCredentials(transport: Transport = URLSession.webserviceTransport(), type: AccountType, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
public static func validateCredentials(transport: Transport = URLSession.webserviceTransport(), type: AccountType, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
||||||
switch type {
|
|
||||||
case .feedbin:
|
Task { @MainActor in
|
||||||
FeedbinAccountDelegate.validateCredentials(transport: transport, credentials: credentials, secretsProvider: secretsProvider, completion: completion)
|
|
||||||
case .newsBlur:
|
do {
|
||||||
NewsBlurAccountDelegate.validateCredentials(transport: transport, credentials: credentials, secretsProvider: secretsProvider, completion: completion)
|
switch type {
|
||||||
case .freshRSS, .inoreader, .bazQux, .theOldReader:
|
|
||||||
ReaderAPIAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider, completion: completion)
|
case .feedbin:
|
||||||
default:
|
|
||||||
break
|
let credentials = try await FeedbinAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider)
|
||||||
|
completion(.success(credentials))
|
||||||
|
|
||||||
|
case .newsBlur:
|
||||||
|
|
||||||
|
let credentials = try await NewsBlurAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider)
|
||||||
|
completion(.success(credentials))
|
||||||
|
|
||||||
|
case .freshRSS, .inoreader, .bazQux, .theOldReader:
|
||||||
|
|
||||||
|
let credentials = try await ReaderAPIAccountDelegate.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider)
|
||||||
|
completion(.success(credentials))
|
||||||
|
|
||||||
|
default:
|
||||||
|
completion(.success(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
completion(.failure(error))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ import Secrets
|
||||||
|
|
||||||
func accountWillBeDeleted(_ account: Account)
|
func accountWillBeDeleted(_ account: Account)
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void)
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials?
|
||||||
|
|
||||||
/// Suspend all network activity
|
/// Suspend all network activity
|
||||||
func suspendNetwork()
|
func suspendNetwork()
|
||||||
|
|
|
@ -548,8 +548,9 @@ enum CloudKitAccountDelegateError: LocalizedError {
|
||||||
articlesZone.resetChangeToken()
|
articlesZone.resetChangeToken()
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
return completion(.success(nil))
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Suspend and Resume (for iOS)
|
// MARK: Suspend and Resume (for iOS)
|
||||||
|
|
|
@ -647,8 +647,23 @@ final class FeedbinAccountDelegate: AccountDelegate {
|
||||||
func accountWillBeDeleted(_ account: Account) {
|
func accountWillBeDeleted(_ account: Account) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
|
|
||||||
|
try await withCheckedThrowingContinuation { continuation in
|
||||||
|
|
||||||
|
self.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider) { result in
|
||||||
|
switch result {
|
||||||
|
case .success(let credentials):
|
||||||
|
continuation.resume(returning: credentials)
|
||||||
|
case .failure(let error):
|
||||||
|
continuation.resume(throwing: error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
||||||
|
|
||||||
let caller = FeedbinAPICaller(transport: transport)
|
let caller = FeedbinAPICaller(transport: transport)
|
||||||
caller.credentials = credentials
|
caller.credentials = credentials
|
||||||
caller.validateCredentials() { result in
|
caller.validateCredentials() { result in
|
||||||
|
|
|
@ -629,9 +629,10 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||||
MainThreadOperationQueue.shared.add(logout)
|
MainThreadOperationQueue.shared.add(logout)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
|
|
||||||
assertionFailure("An `account` instance should enqueue an \(FeedlyRefreshAccessTokenOperation.self) instead.")
|
assertionFailure("An `account` instance should enqueue an \(FeedlyRefreshAccessTokenOperation.self) instead.")
|
||||||
completion(.success(credentials))
|
return credentials
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Suspend and Resume (for iOS)
|
// MARK: Suspend and Resume (for iOS)
|
||||||
|
|
|
@ -161,8 +161,9 @@ final class LocalAccountDelegate: AccountDelegate {
|
||||||
func accountWillBeDeleted(_ account: Account) {
|
func accountWillBeDeleted(_ account: Account) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
return completion(.success(nil))
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Suspend and Resume (for iOS)
|
// MARK: Suspend and Resume (for iOS)
|
||||||
|
|
|
@ -689,7 +689,22 @@ final class NewsBlurAccountDelegate: AccountDelegate {
|
||||||
caller.logout() { _ in }
|
caller.logout() { _ in }
|
||||||
}
|
}
|
||||||
|
|
||||||
class func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> ()) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
|
|
||||||
|
try await withCheckedThrowingContinuation { continuation in
|
||||||
|
|
||||||
|
self.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider) { result in
|
||||||
|
switch result {
|
||||||
|
case .success(let credentials):
|
||||||
|
continuation.resume(returning: credentials)
|
||||||
|
case .failure(let error):
|
||||||
|
continuation.resume(throwing: error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL? = nil, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> ()) {
|
||||||
let caller = NewsBlurAPICaller(transport: transport)
|
let caller = NewsBlurAPICaller(transport: transport)
|
||||||
caller.credentials = credentials
|
caller.credentials = credentials
|
||||||
caller.validateCredentials() { result in
|
caller.validateCredentials() { result in
|
||||||
|
|
|
@ -701,7 +701,23 @@ final class ReaderAPIAccountDelegate: AccountDelegate {
|
||||||
func accountWillBeDeleted(_ account: Account) {
|
func accountWillBeDeleted(_ account: Account) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider) async throws -> Credentials? {
|
||||||
|
|
||||||
|
try await withCheckedThrowingContinuation { continuation in
|
||||||
|
|
||||||
|
self.validateCredentials(transport: transport, credentials: credentials, endpoint: endpoint, secretsProvider: secretsProvider) { result in
|
||||||
|
|
||||||
|
switch result {
|
||||||
|
case .success(let credentials):
|
||||||
|
continuation.resume(returning: credentials)
|
||||||
|
case .failure(let error):
|
||||||
|
continuation.resume(throwing: error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, secretsProvider: SecretsProvider, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
||||||
guard let endpoint = endpoint else {
|
guard let endpoint = endpoint else {
|
||||||
completion(.failure(TransportError.noURL))
|
completion(.failure(TransportError.noURL))
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue