From: Roopesh Chander Date: Sat, 24 Jul 2021 19:29:36 +0000 (+0530) Subject: UI: TunnelsManager: Add setOnDemandEnabled() instance method X-Git-Tag: 1.0.14-25~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=df9934a4b825990c9a4eb19e67f0a0d3fd1b1362;p=thirdparty%2Fwireguard-apple.git UI: TunnelsManager: Add setOnDemandEnabled() instance method Signed-off-by: Roopesh Chander --- 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 }