]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Tunnel edit: Clean up error handling when saving
authorRoopesh Chander <roop@roopc.net>
Mon, 21 Jan 2019 21:52:01 +0000 (03:22 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 21 Jan 2019 21:56:01 +0000 (03:26 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift

index a5547a1e76c703188d2da4168125277fdd405ac9..78c2bcc2cfb8aff989326c3fe26afbc8beb488a9 100644 (file)
@@ -186,48 +186,43 @@ class TunnelEditViewController: NSViewController {
         } else {
             onDemandSetting = ActivateOnDemandSetting(isActivateOnDemandEnabled: true, activateOnDemandOption: onDemandOption)
         }
+
+        let isTunnelModifiedWithoutChangingName = (tunnel != nil && tunnel!.name == name)
+        guard isTunnelModifiedWithoutChangingName || tunnelsManager.tunnel(named: name) == nil else {
+            ErrorPresenter.showErrorAlert(title: tr(format: "macAlertDuplicateName (%@)", name), message: "", from: self)
+            return
+        }
+
+        let tunnelConfiguration: TunnelConfiguration
+        do {
+            tunnelConfiguration = try TunnelConfiguration(fromWgQuickConfig: textView.string, called: nameRow.value)
+        } catch let error as WireGuardAppError {
+            ErrorPresenter.showErrorAlert(error: error, from: self)
+            return
+        } catch {
+            fatalError()
+        }
+
         if let tunnel = tunnel {
             // We're modifying an existing tunnel
-            if name != tunnel.name && tunnelsManager.tunnel(named: name) != nil {
-                ErrorPresenter.showErrorAlert(title: tr(format: "macAlertDuplicateName (%@)", name), message: "", from: self)
-                return
-            }
-            do {
-                let tunnelConfiguration = try TunnelConfiguration(fromWgQuickConfig: textView.string, called: nameRow.value)
-                tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] error in
-                    if let error = error {
-                        ErrorPresenter.showErrorAlert(error: error, from: self)
-                        return
-                    }
-                    self?.dismiss(self)
-                    self?.delegate?.tunnelSaved(tunnel: tunnel)
+            tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] error in
+                if let error = error {
+                    ErrorPresenter.showErrorAlert(error: error, from: self)
+                    return
                 }
-            } catch let error as WireGuardAppError {
-                ErrorPresenter.showErrorAlert(error: error, from: self)
-            } catch {
-                fatalError()
+                self?.dismiss(self)
+                self?.delegate?.tunnelSaved(tunnel: tunnel)
             }
         } else {
             // We're creating a new tunnel
-            if tunnelsManager.tunnel(named: name) != nil {
-                ErrorPresenter.showErrorAlert(title: tr(format: "macAlertDuplicateName (%@)", name), message: "", from: self)
-                return
-            }
-            do {
-                let tunnelConfiguration = try TunnelConfiguration(fromWgQuickConfig: textView.string, called: nameRow.value)
-                tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] result in
-                    if let error = result.error {
-                        ErrorPresenter.showErrorAlert(error: error, from: self)
-                    } else {
-                        let tunnel: TunnelContainer = result.value!
-                        self?.dismiss(self)
-                        self?.delegate?.tunnelSaved(tunnel: tunnel)
-                    }
+            tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] result in
+                if let error = result.error {
+                    ErrorPresenter.showErrorAlert(error: error, from: self)
+                } else {
+                    let tunnel: TunnelContainer = result.value!
+                    self?.dismiss(self)
+                    self?.delegate?.tunnelSaved(tunnel: tunnel)
                 }
-            } catch let error as WireGuardAppError {
-                ErrorPresenter.showErrorAlert(error: error, from: self)
-            } catch {
-                fatalError()
             }
         }
     }