]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Settings: Export log: Perform file operations in a background thread
authorRoopesh Chander <roop@roopc.net>
Fri, 7 Dec 2018 19:51:46 +0000 (01:21 +0530)
committerRoopesh Chander <roop@roopc.net>
Fri, 7 Dec 2018 20:47:55 +0000 (02:17 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/iOS/SettingsTableViewController.swift

index 6623f79b296f16fba927f595889163a4dec8aa03..d9675bb3c391ecd428d38b435ab3f2ce2c2d5b98 100644 (file)
@@ -96,37 +96,42 @@ class SettingsTableViewController: UITableViewController {
         let timeStampString = dateFormatter.string(from: Date())
         let destinationURL = destinationDir.appendingPathComponent("wireguard-log-\(timeStampString).txt")
 
-        if (FileManager.default.fileExists(atPath: destinationURL.path)) {
-            let isDeleted = FileManager.deleteFile(at: destinationURL)
-            if (!isDeleted) {
-                ErrorPresenter.showErrorAlert(title: "No log available", message: "The pre-existing log could not be cleared", from: self)
-                return
+        DispatchQueue.global(qos: .userInitiated).async {
+
+            if (FileManager.default.fileExists(atPath: destinationURL.path)) {
+                let isDeleted = FileManager.deleteFile(at: destinationURL)
+                if (!isDeleted) {
+                    ErrorPresenter.showErrorAlert(title: "No log available", message: "The pre-existing log could not be cleared", from: self)
+                    return
+                }
             }
-        }
 
-        guard let networkExtensionLogFileURL = FileManager.networkExtensionLogFileURL,
-            FileManager.default.fileExists(atPath: networkExtensionLogFileURL.path) else {
-                ErrorPresenter.showErrorAlert(title: "No log available", message: "Please activate a tunnel and then export the log", from: self)
-                return
-        }
+            guard let networkExtensionLogFileURL = FileManager.networkExtensionLogFileURL,
+                FileManager.default.fileExists(atPath: networkExtensionLogFileURL.path) else {
+                    ErrorPresenter.showErrorAlert(title: "No log available", message: "Please activate a tunnel and then export the log", from: self)
+                    return
+            }
 
-        do {
-            try FileManager.default.copyItem(at: networkExtensionLogFileURL, to: destinationURL)
-        } catch {
-            os_log("Failed to copy file: %{public}@ to %{public}@: %{public}@", log: OSLog.default, type: .error, networkExtensionLogFileURL.absoluteString, destinationURL.absoluteString, error.localizedDescription)
-            ErrorPresenter.showErrorAlert(title: "Log export failed", message: "The log could not be copied", from: self)
-            return
-        }
+            do {
+                try FileManager.default.copyItem(at: networkExtensionLogFileURL, to: destinationURL)
+            } catch {
+                os_log("Failed to copy file: %{public}@ to %{public}@: %{public}@", log: OSLog.default, type: .error, networkExtensionLogFileURL.absoluteString, destinationURL.absoluteString, error.localizedDescription)
+                ErrorPresenter.showErrorAlert(title: "Log export failed", message: "The log could not be copied", from: self)
+                return
+            }
 
-        let activityVC = UIActivityViewController(activityItems: [destinationURL], applicationActivities: nil)
-        // popoverPresentationController shall be non-nil on the iPad
-        activityVC.popoverPresentationController?.sourceView = sourceView
-        activityVC.popoverPresentationController?.sourceRect = sourceView.bounds
-        activityVC.completionWithItemsHandler = { (_, _, _, _) in
-            // Remove the exported log file after the activity has completed
-            _ = FileManager.deleteFile(at: destinationURL)
+            DispatchQueue.main.async {
+                let activityVC = UIActivityViewController(activityItems: [destinationURL], applicationActivities: nil)
+                // popoverPresentationController shall be non-nil on the iPad
+                activityVC.popoverPresentationController?.sourceView = sourceView
+                activityVC.popoverPresentationController?.sourceRect = sourceView.bounds
+                activityVC.completionWithItemsHandler = { (_, _, _, _) in
+                    // Remove the exported log file after the activity has completed
+                    _ = FileManager.deleteFile(at: destinationURL)
+                }
+                self.present(activityVC, animated: true)
+            }
         }
-        self.present(activityVC, animated: true)
     }
 }