diff options
author | Roopesh Chander <roop@roopc.net> | 2021-07-25 00:59:36 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2021-07-28 03:18:01 +0530 |
commit | df9934a4b825990c9a4eb19e67f0a0d3fd1b1362 (patch) | |
tree | 848fad85d749e0f395d5e99ff329fa6cc2c15d43 | |
parent | UI: TunnelsManager: Add TunnelContainer.hasOnDemandRules (diff) | |
download | wireguard-apple-df9934a4b825990c9a4eb19e67f0a0d3fd1b1362.tar.xz wireguard-apple-df9934a4b825990c9a4eb19e67f0a0d3fd1b1362.zip |
UI: TunnelsManager: Add setOnDemandEnabled() instance method
Signed-off-by: Roopesh Chander <roop@roopc.net>
-rw-r--r-- | Sources/WireGuardApp/Tunnel/TunnelsManager.swift | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift index c73891e..8eda2cb 100644 --- a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift +++ b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift @@ -342,6 +342,36 @@ class TunnelsManager { } } + func setOnDemandEnabled(_ isOnDemandEnabled: Bool, on tunnel: TunnelContainer, completionHandler: @escaping (TunnelsManagerError?) -> Void) { + let tunnelProviderManager = tunnel.tunnelProvider + guard tunnelProviderManager.isOnDemandEnabled != isOnDemandEnabled else { + completionHandler(nil) + return + } + let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && isOnDemandEnabled + tunnelProviderManager.isOnDemandEnabled = isOnDemandEnabled + tunnelProviderManager.saveToPreferences { error in + if let error = error { + wg_log(.error, message: "Modify On-Demand: Saving configuration failed: \(error)") + completionHandler(TunnelsManagerError.systemErrorOnModifyTunnel(systemError: error)) + return + } + if isActivatingOnDemand { + tunnelProviderManager.loadFromPreferences { error in + tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled + if let error = error { + wg_log(.error, message: "Modify On-Demand: Re-loading after saving configuration failed: \(error)") + completionHandler(TunnelsManagerError.systemErrorOnModifyTunnel(systemError: error)) + } else { + completionHandler(nil) + } + } + } else { + completionHandler(nil) + } + } + } + func numberOfTunnels() -> Int { return tunnels.count } |