]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
TunnelsManager: addMultiple() should also return the last error
authorRoopesh Chander <roop@roopc.net>
Tue, 5 Mar 2019 09:54:08 +0000 (15:24 +0530)
committerRoopesh Chander <roop@roopc.net>
Tue, 5 Mar 2019 09:59:28 +0000 (15:29 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift
WireGuard/WireGuard/UI/TunnelImporter.swift

index e05bea9d5173ee24fa45b4908c826aa9342a3032..a94d63d77a42f71bff71bc481c65313d2f8fa0fb 100644 (file)
@@ -148,19 +148,21 @@ class TunnelsManager {
         }
     }
 
-    func addMultiple(tunnelConfigurations: [TunnelConfiguration], completionHandler: @escaping (UInt) -> Void) {
-        addMultiple(tunnelConfigurations: ArraySlice(tunnelConfigurations), numberSuccessful: 0, completionHandler: completionHandler)
+    func addMultiple(tunnelConfigurations: [TunnelConfiguration], completionHandler: @escaping (UInt, TunnelsManagerError?) -> Void) {
+        addMultiple(tunnelConfigurations: ArraySlice(tunnelConfigurations), numberSuccessful: 0, lastError: nil, completionHandler: completionHandler)
     }
 
-    private func addMultiple(tunnelConfigurations: ArraySlice<TunnelConfiguration>, numberSuccessful: UInt, completionHandler: @escaping (UInt) -> Void) {
+    private func addMultiple(tunnelConfigurations: ArraySlice<TunnelConfiguration>, numberSuccessful: UInt, lastError: TunnelsManagerError?, completionHandler: @escaping (UInt, TunnelsManagerError?) -> Void) {
         guard let head = tunnelConfigurations.first else {
-            completionHandler(numberSuccessful)
+            completionHandler(numberSuccessful, lastError)
             return
         }
         let tail = tunnelConfigurations.dropFirst()
         add(tunnelConfiguration: head) { [weak self, tail] result in
             DispatchQueue.main.async {
-                self?.addMultiple(tunnelConfigurations: tail, numberSuccessful: numberSuccessful + (result.isSuccess ? 1 : 0), completionHandler: completionHandler)
+                let numberSuccessful = numberSuccessful + (result.isSuccess ? 1 : 0)
+                let lastError = lastError ?? (result.error as? TunnelsManagerError)
+                self?.addMultiple(tunnelConfigurations: tail, numberSuccessful: numberSuccessful, lastError: lastError, completionHandler: completionHandler)
             }
         }
     }
index 4fabd07b5a355df46b542cddfa3d46032684c0a4..a306a7e094d8bdfa80f83cd84943335a0b0b0bfc 100644 (file)
@@ -56,7 +56,7 @@ class TunnelImporter {
             }
         }
         dispatchGroup.notify(queue: .main) {
-            tunnelsManager.addMultiple(tunnelConfigurations: configs.compactMap { $0 }) { numberSuccessful in
+            tunnelsManager.addMultiple(tunnelConfigurations: configs.compactMap { $0 }) { numberSuccessful, _ in
                 if !configs.isEmpty && numberSuccessful == configs.count {
                     completionHandler?()
                     return