diff options
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | ios/MullvadVPN/TunnelManager/ReconnectTunnelOperation.swift | 56 | ||||
| -rw-r--r-- | ios/MullvadVPN/TunnelManager/TunnelManager.swift | 43 |
3 files changed, 27 insertions, 76 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index da36add3d1..9931a2cbac 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -106,7 +106,6 @@ 5846227326E22A160035F7C2 /* StorePaymentObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5846227226E22A160035F7C2 /* StorePaymentObserver.swift */; }; 5846227726E22A7C0035F7C2 /* StorePaymentManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5846227626E22A7C0035F7C2 /* StorePaymentManagerDelegate.swift */; }; 5847D58D29B7740F008C3808 /* RevokedCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5847D58C29B7740F008C3808 /* RevokedCoordinator.swift */; }; - 584B17AB27637DE40057F3B8 /* ReconnectTunnelOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584B17AA27637DE40057F3B8 /* ReconnectTunnelOperation.swift */; }; 584D26C2270C8542004EA533 /* SettingsStaticTextFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584D26C1270C8542004EA533 /* SettingsStaticTextFooterView.swift */; }; 584D26C4270C855B004EA533 /* PreferencesDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584D26C3270C855A004EA533 /* PreferencesDataSource.swift */; }; 584D26C6270C8741004EA533 /* SettingsDNSTextCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584D26C5270C8741004EA533 /* SettingsDNSTextCell.swift */; }; @@ -725,7 +724,6 @@ 5846227226E22A160035F7C2 /* StorePaymentObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorePaymentObserver.swift; sourceTree = "<group>"; }; 5846227626E22A7C0035F7C2 /* StorePaymentManagerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorePaymentManagerDelegate.swift; sourceTree = "<group>"; }; 5847D58C29B7740F008C3808 /* RevokedCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedCoordinator.swift; sourceTree = "<group>"; }; - 584B17AA27637DE40057F3B8 /* ReconnectTunnelOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReconnectTunnelOperation.swift; sourceTree = "<group>"; }; 584B26F3237434D00073B10E /* RelaySelectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaySelectorTests.swift; sourceTree = "<group>"; }; 584D0111299134AB00531822 /* Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = "<group>"; }; 584D26BE270C550B004EA533 /* AnyIPAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyIPAddress.swift; sourceTree = "<group>"; }; @@ -1198,7 +1196,6 @@ children = ( 588527B1276B3F0700BAA373 /* LoadTunnelConfigurationOperation.swift */, 58F2E147276A307400A79513 /* MapConnectionStatusOperation.swift */, - 584B17AA27637DE40057F3B8 /* ReconnectTunnelOperation.swift */, 58F2E14B276A61C000A79513 /* RotateKeyOperation.swift */, 586E54FA27A2DF6D0029B88B /* SendTunnelProviderMessageOperation.swift */, 588527B3276B4F2F00BAA373 /* SetAccountOperation.swift */, @@ -2680,7 +2677,6 @@ 58E25F812837BBBB002CFB2C /* SceneDelegate.swift in Sources */, 5867771629097C5B006F721F /* ProductState.swift in Sources */, 585E820327F3285E00939F0E /* SendStoreReceiptOperation.swift in Sources */, - 584B17AB27637DE40057F3B8 /* ReconnectTunnelOperation.swift in Sources */, 5820676426E771DB00655B05 /* TunnelManagerErrors.swift in Sources */, 585B4B8726D9098900555C4C /* TunnelStatusNotificationProvider.swift in Sources */, 063F026628FFE11C001FA09F /* RESTCreateApplePaymentResponse+Localization.swift in Sources */, diff --git a/ios/MullvadVPN/TunnelManager/ReconnectTunnelOperation.swift b/ios/MullvadVPN/TunnelManager/ReconnectTunnelOperation.swift deleted file mode 100644 index 2c38566fc1..0000000000 --- a/ios/MullvadVPN/TunnelManager/ReconnectTunnelOperation.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// ReconnectTunnelOperation.swift -// MullvadVPN -// -// Created by pronebird on 10/12/2021. -// Copyright © 2021 Mullvad VPN AB. All rights reserved. -// - -import Foundation -import MullvadREST -import MullvadTypes -import Operations -import RelayCache -import RelaySelector - -class ReconnectTunnelOperation: ResultOperation<Void> { - private let interactor: TunnelInteractor - private let selectNewRelay: Bool - private var task: Cancellable? - - init( - dispatchQueue: DispatchQueue, - interactor: TunnelInteractor, - selectNewRelay: Bool - ) { - self.interactor = interactor - self.selectNewRelay = selectNewRelay - - super.init(dispatchQueue: dispatchQueue) - } - - override func main() { - guard let tunnel = interactor.tunnel else { - finish(result: .failure(UnsetTunnelError())) - return - } - - do { - let selectorResult = selectNewRelay ? try interactor.selectRelay() : nil - - task = tunnel - .reconnectTunnel( - relaySelectorResult: selectorResult - ) { [weak self] result in - self?.finish(result: result) - } - } catch { - finish(result: .failure(error)) - } - } - - override func operationDidCancel() { - task?.cancel() - task = nil - } -} diff --git a/ios/MullvadVPN/TunnelManager/TunnelManager.swift b/ios/MullvadVPN/TunnelManager/TunnelManager.swift index 74c2127059..d72c314c3e 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelManager.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelManager.swift @@ -323,21 +323,34 @@ final class TunnelManager: StorePaymentObserver { operationQueue.addOperation(operation) } - func reconnectTunnel( - selectNewRelay: Bool, - completionHandler: ((Error?) -> Void)? = nil - ) { - let operation = ReconnectTunnelOperation( - dispatchQueue: internalQueue, - interactor: TunnelInteractorProxy(self), - selectNewRelay: selectNewRelay - ) + func reconnectTunnel(selectNewRelay: Bool, completionHandler: ((Error?) -> Void)? = nil) { + let operation = AsyncBlockOperation(dispatchQueue: internalQueue) { operation in + guard let tunnel = self.tunnel else { + operation.finish(error: UnsetTunnelError()) + return + } - operation.completionQueue = .main - operation.completionHandler = { [weak self] result in - self?.didReconnectTunnel(error: result.error) + do { + let selectorResult = selectNewRelay ? try self.selectRelay() : nil + + let task = tunnel.reconnectTunnel(relaySelectorResult: selectorResult) { result in + operation.finish(error: result.error) + } - completionHandler?(result.error) + operation.addCancellationBlock { + task.cancel() + } + } catch { + operation.finish(error: error) + } + } + + operation.completionBlock = { + DispatchQueue.main.async { + self.didReconnectTunnel(error: operation.error) + + completionHandler?(operation.error) + } } operation.addObserver( @@ -347,9 +360,7 @@ final class TunnelManager: StorePaymentObserver { cancelUponExpiration: true ) ) - operation.addCondition( - MutuallyExclusive(category: OperationCategory.manageTunnel.category) - ) + operation.addCondition(MutuallyExclusive(category: OperationCategory.manageTunnel.category)) operationQueue.addOperation(operation) } |
