]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Zip importing: importFromFile should take a completionHandler
authorRoopesh Chander <roop@roopc.net>
Wed, 12 Dec 2018 13:54:12 +0000 (19:24 +0530)
committerRoopesh Chander <roop@roopc.net>
Wed, 12 Dec 2018 13:54:18 +0000 (19:24 +0530)
Deletion of the being-imported file should be done in the
completionHandler.

Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/iOS/AppDelegate.swift
WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift

index 5dca2ad637078bc50d1ad95eec35b616e49037e2..d62890ee7c8b080e75f1f6b91df6efcfa20eeedb 100644 (file)
@@ -27,8 +27,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     }
 
     func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
-        mainVC?.tunnelsListVC?.importFromFile(url: url)
-        _ = FileManager.deleteFile(at: url)
+        mainVC?.tunnelsListVC?.importFromFile(url: url) {
+            _ = FileManager.deleteFile(at: url)
+        }
         return true
     }
 
index b1102c47997d9d70c2be7bc4022cfc1c0566d572..66c4452743835e314ea0e341698bb9eee94f792e 100644 (file)
@@ -165,7 +165,7 @@ class TunnelsListTableViewController: UIViewController {
         self.present(scanQRCodeNC, animated: true)
     }
 
-    func importFromFile(url: URL) {
+    func importFromFile(url: URL, completionHandler: (() -> Void)?) {
         guard let tunnelsManager = tunnelsManager else { return }
         if (url.pathExtension == "zip") {
             ZipImporter.importConfigFiles(from: url) { [weak self] result in
@@ -176,11 +176,12 @@ class TunnelsListTableViewController: UIViewController {
                 let configs: [TunnelConfiguration?] = result.value!
                 tunnelsManager.addMultiple(tunnelConfigurations: configs.compactMap { $0 }) { [weak self] (numberSuccessful) in
                     if numberSuccessful == configs.count {
+                        completionHandler?()
                         return
                     }
                     ErrorPresenter.showErrorAlert(title: "Created \(numberSuccessful) tunnels",
                         message: "Created \(numberSuccessful) of \(configs.count) tunnels from zip archive",
-                        from: self)
+                        from: self, onPresented: completionHandler)
                 }
             }
         } else /* if (url.pathExtension == "conf") -- we assume everything else is a conf */ {
@@ -189,13 +190,15 @@ class TunnelsListTableViewController: UIViewController {
                 let tunnelConfiguration = try? WgQuickConfigFileParser.parse(fileContents, name: fileBaseName) {
                 tunnelsManager.add(tunnelConfiguration: tunnelConfiguration) { [weak self] result in
                     if let error = result.error {
-                        ErrorPresenter.showErrorAlert(error: error, from: self)
+                        ErrorPresenter.showErrorAlert(error: error, from: self, onPresented: completionHandler)
+                    } else {
+                        completionHandler?()
                     }
                 }
             } else {
                 ErrorPresenter.showErrorAlert(title: "Unable to import tunnel",
                                               message: "An error occured when importing the tunnel configuration.",
-                                              from: self)
+                                              from: self, onPresented: completionHandler)
             }
         }
     }
@@ -205,7 +208,9 @@ class TunnelsListTableViewController: UIViewController {
 
 extension TunnelsListTableViewController: UIDocumentPickerDelegate {
     func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
-        urls.forEach(importFromFile)
+        urls.forEach {
+            importFromFile(url: $0, completionHandler: nil)
+        }
     }
 }