From df9934a4b825990c9a4eb19e67f0a0d3fd1b1362 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Sun, 25 Jul 2021 00:59:36 +0530 Subject: [PATCH] UI: TunnelsManager: Add setOnDemandEnabled() instance method Signed-off-by: Roopesh Chander --- .../WireGuardApp/Tunnel/TunnelsManager.swift | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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 } -- 2.47.2