summaryrefslogtreecommitdiff
path: root/ZeroTier One/ShowNetworksViewController.swift
blob: 7c155bf6f90cd4fd694e611ec1a2e3d5614e8343 (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
129
130
131
132
//
//  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!

    var visible = false

    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()
        visible = true
    }

    override func viewWillDisappear() {
        super.viewWillDisappear()

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

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


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

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

                    if defaultRouteExists(networkList) {
                        cell.allowDefault.enabled = false
                    }
                    else {
                        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
            }
            
            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)\n"
            }



            return cell
        }

        return nil
    }

    // end NSTableViewDelegate
}