]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Manage tunnels: Export log pulldown menu implementation
authorRoopesh Chander <roop@roopc.net>
Fri, 4 Jan 2019 12:41:49 +0000 (18:11 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 14 Jan 2019 09:22:32 +0000 (14:52 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/AppDelegate.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift

index 3a5aa1d7c3d3b5aae0145eda41f77d9cb25d3ec0..2403d0fc596a3f9e8b76a97c498fe0d149b70932 100644 (file)
@@ -9,6 +9,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
     var statusItem: NSStatusItem?
 
     func applicationDidFinishLaunching(_ aNotification: Notification) {
+        Logger.configureGlobal(withFilePath: FileManager.appLogFileURL?.path)
+
         TunnelsManager.create { [weak self] result in
             guard let self = self else { return }
             guard result.isSuccess else { return } // TODO: Show alert
index 9bdcceae029e0acf13dbffef4de11ac660ee0069..2d0b6fea7797f7d6c4af00a16808aad129f384af 100644 (file)
@@ -144,7 +144,36 @@ class TunnelsListTableViewController: NSViewController {
     }
 
     @objc func exportLogClicked() {
-        print("exportLogClicked")
+        guard let window = view.window else { return }
+        let savePanel = NSSavePanel()
+        savePanel.prompt = "Save"
+        savePanel.nameFieldLabel = "Export log to"
+
+        let dateFormatter = ISO8601DateFormatter()
+        dateFormatter.formatOptions = [.withFullDate, .withTime, .withTimeZone] // Avoid ':' in the filename
+        let timeStampString = dateFormatter.string(from: Date())
+        savePanel.nameFieldStringValue = "wireguard-log-\(timeStampString).txt"
+
+        guard let networkExtensionLogFilePath = FileManager.networkExtensionLogFileURL?.path else {
+            ErrorPresenter.showErrorAlert(title: tr("alertUnableToFindExtensionLogPathTitle"), message: tr("alertUnableToFindExtensionLogPathMessage"), from: self)
+            return
+        }
+
+        savePanel.beginSheetModal(for: window) { response in
+            guard response == .OK else { return }
+            guard let destinationURL = savePanel.url else { return }
+
+            DispatchQueue.global(qos: .userInitiated).async {
+                let isWritten = Logger.global?.writeLog(called: "APP", mergedWith: networkExtensionLogFilePath, called: "NET", to: destinationURL.path) ?? false
+                guard isWritten else {
+                    DispatchQueue.main.async { [weak self] in
+                        ErrorPresenter.showErrorAlert(title: tr("alertUnableToWriteLogTitle"), message: tr("alertUnableToWriteLogMessage"), from: self)
+                    }
+                    return
+                }
+            }
+
+        }
     }
 
     @objc func exportTunnelsClicked() {