Only poll the ZeroTier service when the menu or Network List are visible. Reduces CPU idle prevention by a a LOT

This commit is contained in:
Grant Limberg 2016-07-26 20:31:06 -07:00
parent b9a4d138fc
commit 78e5a00a68
3 changed files with 27 additions and 5 deletions

View File

@ -9,7 +9,7 @@
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
@IBOutlet weak var window: NSWindow!
@ -85,6 +85,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
self.showAbout()
}
}
monitor.updateNetworkInfo()
}
func applicationWillTerminate(aNotification: NSNotification) {
@ -181,6 +183,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func buildMenu() {
let menu = NSMenu()
menu.delegate = self
if let s = self.status {
menu.addItem(NSMenuItem(title: "Node ID: \(s.address)", action: #selector(AppDelegate.copyNodeID), keyEquivalent: ""))
@ -230,7 +233,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q"))
statusItem.menu = menu
}
func toggleNetwork(sender: NSMenuItem) {
@ -253,5 +255,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
pasteboard.setString(s.address, forType: NSPasteboardTypeString)
}
}
func menuWillOpen(menu: NSMenu) {
monitor.start()
}
func menuDidClose(menu: NSMenu) {
monitor.stop()
}
}

View File

@ -21,7 +21,14 @@ class NetworkMonitor: NSObject {
override init() {
super.init()
}
deinit {
timer?.invalidate()
}
func start() {
NSLog("ZeroTier monitor started")
timer = NSTimer.scheduledTimerWithTimeInterval(1.0,
target: self,
selector: #selector(updateNetworkInfo),
@ -29,8 +36,11 @@ class NetworkMonitor: NSObject {
repeats: true)
}
deinit {
func stop() {
NSLog("ZeroTier monitor stopped")
timer?.invalidate()
timer = nil
}
private func dataFile() -> String {

View File

@ -35,6 +35,8 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable
override func viewWillAppear() {
super.viewWillAppear()
visible = true
netMonitor.start()
}
override func viewWillDisappear() {
@ -43,6 +45,8 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable
let filePath = dataFile()
NSKeyedArchiver.archiveRootObject(self.networkList, toFile: filePath)
visible = false
netMonitor.stop()
}
func deleteNetworkFromList(nwid: String) {
@ -55,8 +59,6 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable
if visible {
tableView?.reloadData()
}
NSLog("Visible? \(visible)")
}
// NSTableViewDataSource