iOS: Tunnel detail: Reload runtime config every second
This commit is contained in:
parent
26e6f23582
commit
d2e14cfb19
|
@ -20,7 +20,8 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||
|
||||
let peerFields: [TunnelViewModel.PeerField] = [
|
||||
.publicKey, .preSharedKey, .endpoint,
|
||||
.allowedIPs, .persistentKeepAlive
|
||||
.allowedIPs, .persistentKeepAlive,
|
||||
.rxBytes, .txBytes, .lastHandshakeTime
|
||||
]
|
||||
|
||||
let tunnelsManager: TunnelsManager
|
||||
|
@ -30,6 +31,7 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||
private weak var statusCell: SwitchCell?
|
||||
private var onDemandStatusObservationToken: AnyObject?
|
||||
private var statusObservationToken: AnyObject?
|
||||
private var reloadRuntimeConfigurationTimer: Timer?
|
||||
|
||||
init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer) {
|
||||
self.tunnelsManager = tunnelsManager
|
||||
|
@ -38,8 +40,15 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||
super.init(style: .grouped)
|
||||
loadSections()
|
||||
statusObservationToken = tunnel.observe(\.status) { [weak self] _, _ in
|
||||
if let cell = self?.statusCell {
|
||||
self?.updateStatus(statusCell: cell)
|
||||
guard let self = self else { return }
|
||||
if let cell = self.statusCell {
|
||||
self.updateStatus(statusCell: cell)
|
||||
}
|
||||
if tunnel.status == .active {
|
||||
self.startUpdatingRuntimeConfiguration()
|
||||
} else if tunnel.status == .inactive {
|
||||
self.reloadRuntimeConfiguration()
|
||||
self.stopUpdatingRuntimeConfiguration()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +81,16 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||
sections.append(.delete)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
if tunnel.status == .active {
|
||||
self.startUpdatingRuntimeConfiguration()
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
stopUpdatingRuntimeConfiguration()
|
||||
}
|
||||
|
||||
@objc func editTapped() {
|
||||
let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager, tunnel: tunnel)
|
||||
editVC.delegate = self
|
||||
|
@ -121,6 +140,30 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||
}
|
||||
cell.isEnabled = status == .active || status == .inactive
|
||||
}
|
||||
|
||||
func startUpdatingRuntimeConfiguration() {
|
||||
reloadRuntimeConfiguration()
|
||||
reloadRuntimeConfigurationTimer?.invalidate()
|
||||
let reloadTimer = Timer(timeInterval: 1 /* second */, repeats: true) { [weak self] _ in
|
||||
self?.reloadRuntimeConfiguration()
|
||||
}
|
||||
reloadRuntimeConfigurationTimer = reloadTimer
|
||||
RunLoop.main.add(reloadTimer, forMode: .common)
|
||||
}
|
||||
|
||||
func stopUpdatingRuntimeConfiguration() {
|
||||
reloadRuntimeConfigurationTimer?.invalidate()
|
||||
reloadRuntimeConfigurationTimer = nil
|
||||
}
|
||||
|
||||
private func reloadRuntimeConfiguration() {
|
||||
tunnel.getRuntimeTunnelConfiguration(completionHandler: {
|
||||
guard let tunnelConfiguration = $0 else { return }
|
||||
self.tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnelConfiguration)
|
||||
self.loadSections()
|
||||
self.tableView.reloadData()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
extension TunnelDetailTableViewController: TunnelEditTableViewControllerDelegate {
|
||||
|
|
Loading…
Reference in New Issue