aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI/macOS/AppDelegate.swift
blob: 3f089875c9c13d2e00f4fa586830f7f16103d407 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// SPDX-License-Identifier: MIT
// Copyright © 2018 WireGuard LLC. All Rights Reserved.

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var statusItemController: StatusItemController?
    var currentTunnelStatusObserver: AnyObject?

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        Logger.configureGlobal(withFilePath: FileManager.appLogFileURL?.path)

        TunnelsManager.create { [weak self] result in
            guard let self = self else { return }
            if let error = result.error {
                ErrorPresenter.showErrorAlert(error: error, from: nil)
                return
            }

            let tunnelsManager: TunnelsManager = result.value!
            let statusItemController = StatusItemController()

            let statusMenu = StatusMenu(tunnelsManager: tunnelsManager)

            statusItemController.statusItem.menu = statusMenu
            statusItemController.currentTunnel = statusMenu.currentTunnel
            self.currentTunnelStatusObserver = statusMenu.observe(\.currentTunnel) { statusMenu, _ in
                statusItemController.currentTunnel = statusMenu.currentTunnel
            }
            self.statusItemController = statusItemController

            tunnelsManager.tunnelsListDelegate = statusMenu
            tunnelsManager.activationDelegate = statusMenu
        }
    }
}