diff options
author | Grant Limberg <glimberg@gmail.com> | 2016-06-21 19:44:59 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2016-06-21 19:44:59 -0700 |
commit | 6d114b7480ed5a6356b8938a4ebf11a9d19adeec (patch) | |
tree | c8611eaea8c0f655f0044ca8ac3b5b60b1222d2f | |
parent | c8f85ffec97206174dbffbf6290ebcdcf84355ac (diff) | |
download | infinitytier-6d114b7480ed5a6356b8938a4ebf11a9d19adeec.tar.gz infinitytier-6d114b7480ed5a6356b8938a4ebf11a9d19adeec.zip |
dynamically generate the menu so that networks are listed
can join/leave networks directly from the menu
-rw-r--r-- | ZeroTier One/AppDelegate.swift | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift index f0bd0437..dc7a3b9a 100644 --- a/ZeroTier One/AppDelegate.swift +++ b/ZeroTier One/AppDelegate.swift @@ -23,20 +23,15 @@ class AppDelegate: NSObject, NSApplicationDelegate { let monitor = NetworkMonitor() + var networks = [Network]() + func applicationDidFinishLaunching(aNotification: NSNotification) { let nc = NSNotificationCenter.defaultCenter() nc.addObserver(self, selector: #selector(onNetworkListUpdated(_:)), name: networkUpdateKey, object: nil) statusItem.image = NSImage(named: "MenuBarIconMac") - let menu = NSMenu() - - menu.addItem(NSMenuItem(title: "Show Networks", action: #selector(AppDelegate.showNetworks), keyEquivalent: "n")) - menu.addItem(NSMenuItem(title: "Join Network", action: #selector(AppDelegate.joinNetwork), keyEquivalent: "j")) - menu.addItem(NSMenuItem.separatorItem()) - menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q")) - - statusItem.menu = menu + buildMenu() joinNetworkPopover.contentViewController = JoinNetworkViewController( nibName: "JoinNetworkViewController", bundle: nil) @@ -98,6 +93,60 @@ class AppDelegate: NSObject, NSApplicationDelegate { func onNetworkListUpdated(note: NSNotification) { let netList = note.userInfo!["networks"] as! [Network] (networkListPopover.contentViewController as! ShowNetworksViewController).setNetworks(netList) + + self.networks = netList + + buildMenu() + } + + func buildMenu() { + let menu = NSMenu() + + menu.addItem(NSMenuItem(title: "Show Networks", action: #selector(AppDelegate.showNetworks), keyEquivalent: "n")) + menu.addItem(NSMenuItem(title: "Join Network", action: #selector(AppDelegate.joinNetwork), keyEquivalent: "j")) + menu.addItem(NSMenuItem.separatorItem()) + + if networks.count > 0 { + for net in networks { + let id = String(net.nwid, radix: 16) + let networkName = "\(id) (\(net.name))" + + let item = NSMenuItem(title: networkName, action: #selector(AppDelegate.toggleNetwork(_:)), keyEquivalent: "") + + if net.connected { + item.state = NSOnState + } + else { + item.state = NSOffState + } + + item.representedObject = net + + menu.addItem(item) + } + + menu.addItem(NSMenuItem.separatorItem()) + } + + menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q")) + + statusItem.menu = menu + + } + + func toggleNetwork(sender: NSMenuItem) { + NSLog("\(sender.title)") + + let network = sender.representedObject as! Network + + let id = String(network.nwid, radix: 16) + + if network.connected { + ServiceCom.leaveNetwork(id) + } + else { + ServiceCom.joinNetwork(id) + } } } |