summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/Coordinators/AccountCoordinator.swift5
-rw-r--r--ios/MullvadVPN/Coordinators/ApplicationCoordinator.swift6
-rw-r--r--ios/MullvadVPN/TunnelManager/TunnelManager.swift39
-rw-r--r--ios/MullvadVPN/View controllers/Account/AccountInteractor.swift6
-rw-r--r--ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionInteractor.swift4
-rw-r--r--ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionViewController.swift9
-rw-r--r--ios/MullvadVPN/View controllers/Login/LoginInteractor.swift13
-rw-r--r--ios/MullvadVPN/View controllers/Login/LoginViewController.swift22
-rw-r--r--ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherInteractor.swift14
-rw-r--r--ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherViewController.swift9
10 files changed, 59 insertions, 68 deletions
diff --git a/ios/MullvadVPN/Coordinators/AccountCoordinator.swift b/ios/MullvadVPN/Coordinators/AccountCoordinator.swift
index 3c58e35287..9a529a5d9a 100644
--- a/ios/MullvadVPN/Coordinators/AccountCoordinator.swift
+++ b/ios/MullvadVPN/Coordinators/AccountCoordinator.swift
@@ -141,8 +141,9 @@ final class AccountCoordinator: Coordinator, Presentable, Presenting {
)
let alertPresenter = AlertPresenter(context: self)
-
- interactor.logout {
+
+ Task {
+ await interactor.logout()
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { [weak self] in
guard let self else { return }
diff --git a/ios/MullvadVPN/Coordinators/ApplicationCoordinator.swift b/ios/MullvadVPN/Coordinators/ApplicationCoordinator.swift
index 719c97066a..ed61054537 100644
--- a/ios/MullvadVPN/Coordinators/ApplicationCoordinator.swift
+++ b/ios/MullvadVPN/Coordinators/ApplicationCoordinator.swift
@@ -342,8 +342,10 @@ final class ApplicationCoordinator: Coordinator, Presenting, RootContainerViewCo
}
private func logoutRevokedDevice() {
- tunnelManager.unsetAccount { [weak self] in
- self?.continueFlow(animated: true)
+ Task { [weak self] in
+ guard let self else { return }
+ await tunnelManager.unsetAccount()
+ continueFlow(animated: true)
}
}
diff --git a/ios/MullvadVPN/TunnelManager/TunnelManager.swift b/ios/MullvadVPN/TunnelManager/TunnelManager.swift
index 960cfd2a8a..41309a3238 100644
--- a/ios/MullvadVPN/TunnelManager/TunnelManager.swift
+++ b/ios/MullvadVPN/TunnelManager/TunnelManager.swift
@@ -311,19 +311,13 @@ final class TunnelManager: StorePaymentObserver {
operationQueue.addOperation(operation)
}
- func setNewAccount(completion: @escaping (Result<StoredAccountData, Error>) -> Void) {
- setAccount(action: .new) { result in
- completion(result.map { $0! })
- }
+
+ func setNewAccount() async throws -> StoredAccountData {
+ try await setAccount(action: .new)!
}
- func setExistingAccount(
- accountNumber: String,
- completion: @escaping (Result<StoredAccountData, Error>) -> Void
- ) {
- setAccount(action: .existing(accountNumber)) { result in
- completion(result.map { $0! })
- }
+ func setExistingAccount(accountNumber: String) async throws -> StoredAccountData {
+ try await setAccount(action: .existing(accountNumber))!
}
private func setAccount(
@@ -373,13 +367,19 @@ final class TunnelManager: StorePaymentObserver {
operationQueue.addOperation(operation)
}
-
- func unsetAccount(completionHandler: @escaping () -> Void) {
- setAccount(action: .unset) { _ in
- completionHandler()
+
+ private func setAccount(action: SetAccountAction) async throws -> StoredAccountData? {
+ try await withCheckedThrowingContinuation { continuation in
+ setAccount(action: action) { result in
+ continuation.resume(with: result)
+ }
}
}
+ func unsetAccount() async {
+ _ = try? await setAccount(action: .unset)
+ }
+
func updateAccountData(_ completionHandler: ((Error?) -> Void)? = nil) {
let operation = UpdateAccountDataOperation(
dispatchQueue: internalQueue,
@@ -435,13 +435,8 @@ final class TunnelManager: StorePaymentObserver {
return operation
}
- func deleteAccount(
- accountNumber: String,
- completion: ((Error?) -> Void)? = nil
- ) {
- setAccount(action: .delete(accountNumber)) { result in
- completion?(result.error)
- }
+ func deleteAccount(accountNumber: String) async throws {
+ _ = try await setAccount(action: .delete(accountNumber))
}
func updateDeviceData(_ completionHandler: ((Error?) -> Void)? = nil) {
diff --git a/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift b/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift
index 05d2d40465..55a6212179 100644
--- a/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift
+++ b/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift
@@ -52,9 +52,9 @@ final class AccountInteractor {
var deviceState: DeviceState {
tunnelManager.deviceState
}
-
- func logout(_ completion: @escaping () -> Void) {
- tunnelManager.unsetAccount(completionHandler: completion)
+
+ func logout() async {
+ await tunnelManager.unsetAccount()
}
func addPayment(_ payment: SKPayment, for accountNumber: String) {
diff --git a/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionInteractor.swift b/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionInteractor.swift
index 1562c013b8..f0cf80ab87 100644
--- a/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionInteractor.swift
+++ b/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionInteractor.swift
@@ -48,7 +48,7 @@ class AccountDeletionInteractor {
}
}
- func delete(accountNumber: String, completionHandler: @escaping (Error?) -> Void) {
- tunnelManager.deleteAccount(accountNumber: accountNumber, completion: completionHandler)
+ func delete(accountNumber: String) async throws {
+ try await tunnelManager.deleteAccount(accountNumber: accountNumber)
}
}
diff --git a/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionViewController.swift b/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionViewController.swift
index cea4095b75..6479134b14 100644
--- a/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionViewController.swift
+++ b/ios/MullvadVPN/View controllers/AccountDeletion/AccountDeletionViewController.swift
@@ -62,14 +62,15 @@ class AccountDeletionViewController: UIViewController {
private func submit(accountNumber: String) {
contentView.state = .loading
- interactor.delete(accountNumber: accountNumber) { [weak self] error in
+ Task { [weak self] in
guard let self else { return }
- guard let error else {
+ do {
+ try await interactor.delete(accountNumber: accountNumber)
self.contentView.state = .initial
self.delegate?.deleteAccountDidSucceed(controller: self)
- return
+ } catch {
+ self.contentView.state = .failure(error)
}
- self.contentView.state = .failure(error)
}
}
}
diff --git a/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift b/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift
index 4ec56074b1..0f69fe96fd 100644
--- a/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift
+++ b/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift
@@ -21,17 +21,12 @@ final class LoginInteractor {
self.tunnelManager = tunnelManager
}
- func setAccount(accountNumber: String, completion: @escaping (Error?) -> Void) {
- tunnelManager.setExistingAccount(accountNumber: accountNumber) { result in
- completion(result.error)
- }
+ func setAccount(accountNumber: String) async throws {
+ _ = try await tunnelManager.setExistingAccount(accountNumber: accountNumber)
}
- func createAccount(completion: @escaping (Result<String, Error>) -> Void) {
- tunnelManager.setNewAccount { [weak self] result in
- self?.didCreateAccount?()
- completion(result.map { $0.number })
- }
+ func createAccount() async throws -> String {
+ try await tunnelManager.setNewAccount().number
}
func getLastUsedAccount() -> String? {
diff --git a/ios/MullvadVPN/View controllers/Login/LoginViewController.swift b/ios/MullvadVPN/View controllers/Login/LoginViewController.swift
index e2bde94b0c..30376ddebd 100644
--- a/ios/MullvadVPN/View controllers/Login/LoginViewController.swift
+++ b/ios/MullvadVPN/View controllers/Login/LoginViewController.swift
@@ -193,21 +193,21 @@ class LoginViewController: UIViewController, RootContainment {
func start(action: LoginAction) {
beginLogin(action)
+ Task { [weak self] in
+ guard let self else { return }
+ do {
+ switch action {
+ case .createAccount:
+ self.contentView.accountInputGroup.setAccount(try await interactor.createAccount())
- switch action {
- case .createAccount:
- interactor.createAccount { [weak self] result in
- if let newAccountNumber = result.value {
- self?.contentView.accountInputGroup.setAccount(newAccountNumber)
+ case let .useExistingAccount(accountNumber):
+ try await interactor.setAccount(accountNumber: accountNumber)
}
-
- self?.endLogin(action: action, error: result.error)
+ self.endLogin(action: action, error: nil)
+ } catch {
+ self.endLogin(action: action, error: error)
}
- case let .useExistingAccount(accountNumber):
- interactor.setAccount(accountNumber: accountNumber) { [weak self] error in
- self?.endLogin(action: action, error: error)
- }
}
}
diff --git a/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherInteractor.swift b/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherInteractor.swift
index 26da26f147..8801137005 100644
--- a/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherInteractor.swift
+++ b/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherInteractor.swift
@@ -46,16 +46,10 @@ final class RedeemVoucherInteractor {
})
}
- func logout(completionHandler: @escaping () -> Void) {
- preferredAccountNumber.flatMap { accountNumber in
- tunnelManager.unsetAccount { [weak self] in
- guard let self else {
- return
- }
- completionHandler()
- didLogout?(accountNumber)
- }
- }
+ func logout() async {
+ guard let accountNumber = preferredAccountNumber else { return }
+ await tunnelManager.unsetAccount()
+ didLogout?(accountNumber)
}
func cancelAll() {
diff --git a/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherViewController.swift b/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherViewController.swift
index d5757b3026..805aaa0add 100644
--- a/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherViewController.swift
+++ b/ios/MullvadVPN/View controllers/RedeemVoucher/RedeemVoucherViewController.swift
@@ -137,9 +137,12 @@ class RedeemVoucherViewController: UIViewController, UINavigationControllerDeleg
contentView.isEditing = false
contentView.state = .logout
-
- interactor.logout { [weak self] in
- self?.contentView.state = .initial
+
+ Task {
+ [weak self] in
+ guard let self else { return }
+ await interactor.logout()
+ contentView.state = .initial
}
}
}