diff options
author | Roopesh Chander <roop@roopc.net> | 2021-07-30 13:26:56 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2021-07-30 13:29:38 +0530 |
commit | b6831c1aca50f02be5de623e0e4dc6a3d2800d88 (patch) | |
tree | a12fb6724a6f4dd048cd9c51bcce405769ec0704 | |
parent | UI: macOS: Tunnel detail: Incorporate on-demand-ness in toggle button (diff) | |
download | wireguard-apple-b6831c1aca50f02be5de623e0e4dc6a3d2800d88.tar.xz wireguard-apple-b6831c1aca50f02be5de623e0e4dc6a3d2800d88.zip |
UI: macOS: Incorporate on-demand-ness in status menu
Signed-off-by: Roopesh Chander <roop@roopc.net>
-rw-r--r-- | Sources/WireGuardApp/UI/macOS/StatusMenu.swift | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/Sources/WireGuardApp/UI/macOS/StatusMenu.swift b/Sources/WireGuardApp/UI/macOS/StatusMenu.swift index 7076330..79d0cbc 100644 --- a/Sources/WireGuardApp/UI/macOS/StatusMenu.swift +++ b/Sources/WireGuardApp/UI/macOS/StatusMenu.swift @@ -144,10 +144,20 @@ class StatusMenu: NSMenu { @objc func tunnelClicked(sender: AnyObject) { guard let tunnelMenuItem = sender as? TunnelMenuItem else { return } - if tunnelMenuItem.state == .off { - tunnelsManager.startActivation(of: tunnelMenuItem.tunnel) + let tunnel = tunnelMenuItem.tunnel + if tunnel.hasOnDemandRules { + let turnOn = !tunnel.isActivateOnDemandEnabled + tunnelsManager.setOnDemandEnabled(turnOn, on: tunnel) { error in + if error == nil && !turnOn { + self.tunnelsManager.startDeactivation(of: tunnel) + } + } } else { - tunnelsManager.startDeactivation(of: tunnelMenuItem.tunnel) + if tunnel.status == .inactive { + tunnelsManager.startActivation(of: tunnel) + } else if tunnel.status == .active { + tunnelsManager.startDeactivation(of: tunnel) + } } } @@ -291,6 +301,7 @@ class TunnelMenuItem: NSMenuItem { private var statusObservationToken: AnyObject? private var nameObservationToken: AnyObject? + private var isOnDemandEnabledObservationToken: AnyObject? init(tunnel: TunnelContainer, action selector: Selector?) { self.tunnel = tunnel @@ -303,7 +314,12 @@ class TunnelMenuItem: NSMenuItem { let nameObservationToken = tunnel.observe(\TunnelContainer.name) { [weak self] _, _ in self?.updateTitle() } + let isOnDemandEnabledObservationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak self] _, _ in + self?.updateTitle() + self?.updateStatus() + } self.statusObservationToken = statusObservationToken + self.isOnDemandEnabledObservationToken = isOnDemandEnabledObservationToken self.nameObservationToken = nameObservationToken } @@ -312,12 +328,19 @@ class TunnelMenuItem: NSMenuItem { } func updateTitle() { - title = tunnel.name + if tunnel.isActivateOnDemandEnabled { + title = tunnel.name + " (On-Demand)" + } else { + title = tunnel.name + } } func updateStatus() { - let shouldShowCheckmark = (tunnel.status != .inactive && tunnel.status != .deactivating) - state = shouldShowCheckmark ? .on : .off + if tunnel.isActivateOnDemandEnabled { + state = (tunnel.status == .inactive || tunnel.status == .deactivating) ? .mixed : .on + } else { + state = (tunnel.status == .inactive || tunnel.status == .deactivating) ? .off : .on + } } } |