summaryrefslogtreecommitdiff
path: root/ZeroTier One/ShowNetworksViewController.swift
blob: cb017075419c359cbb389040414f35e6791a9c10 (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
//  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 netMonitor: NetworkMonitor!

    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!
    }

    override func viewWillAppear() {
        super.viewWillAppear()
    }

    override func viewWillDisappear() {
        super.viewWillDisappear()

        let filePath = dataFile()
        NSKeyedArchiver.archiveRootObject(self.networkList, toFile: filePath)
    }

    func deleteNetworkFromList(nwid: String) {
        netMonitor.deleteSavedNetwork(nwid)
    }


    func setNetworks(list: [Network]) {
        networkList = list
        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

            if network.connected {
                cell.connectedCheckbox.state = NSOnState

                cell.allowDefault.enabled = true
                cell.allowGlobal.enabled = true
                cell.allowManaged.enabled = true
            }
            else {
                cell.connectedCheckbox.state = NSOffState

                cell.allowDefault.enabled = false
                cell.allowGlobal.enabled = false
                cell.allowManaged.enabled = false
            }
            

            if network.allowDefault {
                cell.allowDefault.state = NSOnState
            }
            else {
                cell.allowDefault.state = NSOffState

                if defaultRouteExists(networkList) {
                    cell.allowDefault.enabled = false
                }
                else {
                    cell.allowDefault.enabled = true
                }
            }

            cell.allowGlobal.state = (network.allowGlobal ? NSOnState : NSOffState)
            cell.allowManaged.state = (network.allowManaged ? NSOnState : NSOffState)

            cell.addressesField.stringValue = ""

            for nw in network.assignedAddresses {
                cell.addressesField.stringValue += nw
                cell.addressesField.stringValue += "\n"
            }



            return cell
        }

        return nil
    }

    // end NSTableViewDelegate
}