2018-12-25 13:03:28 +00:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// Copyright © 2018 WireGuard LLC. All Rights Reserved.
|
|
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
|
|
|
@NSApplicationMain
|
|
|
|
class AppDelegate: NSObject, NSApplicationDelegate {
|
|
|
|
|
2019-01-17 19:57:17 +00:00
|
|
|
var tunnelsManager: TunnelsManager?
|
|
|
|
var tunnelsTracker: TunnelsTracker?
|
2019-01-15 19:30:42 +00:00
|
|
|
var statusItemController: StatusItemController?
|
2019-01-17 19:57:17 +00:00
|
|
|
|
|
|
|
var manageTunnelsRootVC: ManageTunnelsRootViewController?
|
|
|
|
var manageTunnelsWindowObject: NSWindow?
|
2018-12-28 13:59:09 +00:00
|
|
|
|
2018-12-25 13:03:28 +00:00
|
|
|
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
2019-01-04 12:41:49 +00:00
|
|
|
Logger.configureGlobal(withFilePath: FileManager.appLogFileURL?.path)
|
|
|
|
|
2018-12-28 13:59:09 +00:00
|
|
|
TunnelsManager.create { [weak self] result in
|
|
|
|
guard let self = self else { return }
|
2019-01-08 21:06:17 +00:00
|
|
|
if let error = result.error {
|
|
|
|
ErrorPresenter.showErrorAlert(error: error, from: nil)
|
|
|
|
return
|
|
|
|
}
|
2018-12-25 13:03:28 +00:00
|
|
|
|
2018-12-28 13:59:09 +00:00
|
|
|
let tunnelsManager: TunnelsManager = result.value!
|
2019-01-15 19:30:42 +00:00
|
|
|
|
2018-12-28 13:59:09 +00:00
|
|
|
let statusMenu = StatusMenu(tunnelsManager: tunnelsManager)
|
2019-01-17 19:57:17 +00:00
|
|
|
statusMenu.windowDelegate = self
|
2019-01-15 19:30:42 +00:00
|
|
|
|
2019-01-17 19:57:17 +00:00
|
|
|
let statusItemController = StatusItemController()
|
2019-01-15 19:30:42 +00:00
|
|
|
statusItemController.statusItem.menu = statusMenu
|
2019-01-17 19:57:17 +00:00
|
|
|
|
|
|
|
let tunnelsTracker = TunnelsTracker(tunnelsManager: tunnelsManager)
|
|
|
|
tunnelsTracker.statusMenu = statusMenu
|
|
|
|
tunnelsTracker.statusItemController = statusItemController
|
|
|
|
|
|
|
|
self.tunnelsManager = tunnelsManager
|
|
|
|
self.tunnelsTracker = tunnelsTracker
|
2019-01-15 19:30:42 +00:00
|
|
|
self.statusItemController = statusItemController
|
2019-01-17 19:57:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-12-29 10:03:41 +00:00
|
|
|
|
2019-01-17 19:57:17 +00:00
|
|
|
extension AppDelegate: StatusMenuWindowDelegate {
|
|
|
|
func manageTunnelsWindow() -> NSWindow {
|
|
|
|
if manageTunnelsWindowObject == nil {
|
|
|
|
manageTunnelsRootVC = ManageTunnelsRootViewController(tunnelsManager: tunnelsManager!)
|
|
|
|
let window = NSWindow(contentViewController: manageTunnelsRootVC!)
|
|
|
|
window.title = tr("macWindowTitleManageTunnels")
|
|
|
|
window.setContentSize(NSSize(width: 800, height: 480))
|
|
|
|
window.setFrameAutosaveName(NSWindow.FrameAutosaveName("ManageTunnelsWindow")) // Auto-save window position and size
|
|
|
|
manageTunnelsWindowObject = window
|
|
|
|
tunnelsTracker?.manageTunnelsRootVC = manageTunnelsRootVC
|
2018-12-28 13:59:09 +00:00
|
|
|
}
|
2019-01-17 19:57:17 +00:00
|
|
|
return manageTunnelsWindowObject!
|
2018-12-25 13:03:28 +00:00
|
|
|
}
|
|
|
|
}
|