123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- //
- // ShowNetworksViewController.swift
- // ZeroTier One
- //
- // Created by Grant Limberg on 5/14/16.
- // Copyright © 2016 ZeroTier, Inc. All rights reserved.
- //
- import Cocoa
- class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
- @IBOutlet var tableView: NSTableView!
- var networkList: [Network] = [Network]()
- var timer: NSTimer? = nil
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
- tableView.setDelegate(self)
- tableView.setDataSource(self)
- tableView.backgroundColor = NSColor.clearColor()
- }
- private func dataFile() -> String {
- var appSupport = NSFileManager.defaultManager().URLsForDirectory(.ApplicationSupportDirectory, inDomains: .UserDomainMask)[0]
- appSupport = appSupport.URLByAppendingPathComponent("ZeroTier").URLByAppendingPathComponent("One").URLByAppendingPathComponent("networks.dat")
- return appSupport.path!
- }
- private func findNetworkWithID(id: UInt64) -> Int {
- for (index, element) in networkList.enumerate() {
- if element.nwid == id {
- return index
- }
- }
- return NSNotFound
- }
- override func viewWillAppear() {
- super.viewWillAppear()
- updateNetworkInfo()
- self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(updateNetworkInfo), userInfo: nil, repeats: true)
- }
- override func viewWillDisappear() {
- super.viewWillDisappear()
- self.timer?.invalidate()
- let filePath = dataFile()
- NSKeyedArchiver.archiveRootObject(self.networkList, toFile: filePath)
- }
- func deleteNetworkFromList(nwid: String) {
- if let nwid = UInt64(nwid, radix: 16) {
- let index = findNetworkWithID(nwid)
- if index != NSNotFound {
- networkList.removeAtIndex(index)
- tableView.reloadData()
- }
- }
- }
- func updateNetworkInfo() {
- let filePath = self.dataFile()
- if NSFileManager.defaultManager().fileExistsAtPath(filePath) {
- self.networkList = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! [Network]
- ServiceCom.getNetworkList() { (networkList) -> Void in
- for nw in networkList {
- let index = self.findNetworkWithID(nw.nwid)
- if index != NSNotFound {
- self.networkList[index] = nw
- }
- else {
- self.networkList.append(nw)
- }
- }
- NSOperationQueue.mainQueue().addOperationWithBlock() { () -> Void in
- self.networkList.sortInPlace({ (left, right) -> Bool in
- if left.nwid < right.nwid {
- return true
- }
- return false
- })
- self.tableView.reloadData()
- }
- }
- }
- else {
- ServiceCom.getNetworkList() { (networkList) -> Void in
- NSOperationQueue.mainQueue().addOperationWithBlock() { () -> Void in
- self.networkList.sortInPlace({ (left, right) -> Bool in
- if left.nwid < right.nwid {
- return true
- }
- return false
- })
- self.networkList = networkList
- self.tableView.reloadData()
- }
- }
- }
- }
- // NSTableViewDataSource
- func numberOfRowsInTableView(tableView: NSTableView) -> Int {
- return networkList.count
- }
- // end NSTableViewDataSource
- // NSTableViewDelegate
- func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {
- if let cell = tableView.makeViewWithIdentifier("NetworkInfoCell", owner: nil) as? NetworkInfoCell {
- let network = networkList[row]
- cell.parent = self
- cell.networkIdField.stringValue = String(network.nwid, radix: 16)
- cell.networkNameField.stringValue = network.name
- cell.statusField.stringValue = network.status.description
- cell.typeField.stringValue = network.type.description
- cell.macField.stringValue = network.mac
- cell.mtuField.stringValue = String(network.mtu)
- cell.broadcastField.stringValue = network.broadcastEnabled ? "ENABLED" : "DISABLED"
- cell.bridgingField.stringValue = network.bridge ? "ENABLED" : "DISABLED"
- cell.deviceField.stringValue = network.portDeviceName
- cell.addressesField.stringValue = ""
- for nw in network.assignedAddresses {
- cell.addressesField.stringValue += nw
- cell.addressesField.stringValue += "\n"
- }
- if network.connected {
- cell.connectedCheckbox.state = NSOnState
- }
- else {
- cell.connectedCheckbox.state = NSOffState
- }
- return cell
- }
- return nil
- }
- // end NSTableViewDelegate
- }
|