let peerFields: [TunnelViewModel.PeerField] = [
.publicKey, .preSharedKey, .endpoint,
- .allowedIPs, .persistentKeepAlive
+ .allowedIPs, .persistentKeepAlive,
+ .rxBytes, .txBytes, .lastHandshakeTime
]
let tableView: NSTableView = {
statusObservationToken = tunnel.observe(\TunnelContainer.status) { [weak self] _, _ in
self?.updateStatus()
}
+
+ // TODO(roopc): call reloadRuntimeConfiguration() once per second
}
required init?(coder: NSCoder) {
let shouldBeEnabled = (tunnel.status == .active || tunnel.status == .inactive)
statusCheckbox.state = shouldBeChecked ? .on : .off
statusCheckbox.isEnabled = shouldBeEnabled
+ reloadRuntimeConfiguration()
}
@objc func handleEditTunnelAction() {
dismiss(tunnelEditVC)
}
}
+
+ private func reloadRuntimeConfiguration() {
+ tunnel.getRuntimeTunnelConfiguration(completionHandler: {
+ guard let tunnelConfiguration = $0 else { return }
+ if tunnelConfiguration == self.tunnel.tunnelConfiguration {
+ return
+ }
+ self.tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnelConfiguration)
+ // TODO(roopc): make this not loose scroll position
+ self.tableView.reloadData()
+ self.tunnelEditVC = nil
+ })
+ }
}
extension TunnelDetailTableViewController: NSTableViewDataSource {
tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
tableView.reloadData()
self.tunnelEditVC = nil
+ updateStatus()
}
func tunnelEditingCancelled() {