From 60cfceec4fe526214db184cc2175a7940d2b5251 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 4 Jan 2019 18:11:49 +0530 Subject: [PATCH] macOS: Manage tunnels: Export log pulldown menu implementation Signed-off-by: Roopesh Chander --- .../WireGuard/UI/macOS/AppDelegate.swift | 2 ++ .../TunnelsListTableViewController.swift | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/WireGuard/WireGuard/UI/macOS/AppDelegate.swift b/WireGuard/WireGuard/UI/macOS/AppDelegate.swift index 3a5aa1d..2403d0f 100644 --- a/WireGuard/WireGuard/UI/macOS/AppDelegate.swift +++ b/WireGuard/WireGuard/UI/macOS/AppDelegate.swift @@ -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 diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift index 9bdccea..2d0b6fe 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift @@ -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() {