macOS: Manage tunnels: Export log pulldown menu implementation

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander 2019-01-04 18:11:49 +05:30
parent 361830a69e
commit 60cfceec4f
2 changed files with 32 additions and 1 deletions

View 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

View 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() {