]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
on-demand: View model should account for isActivateOnDemandEnabled
authorRoopesh Chander <roop@roopc.net>
Mon, 11 Mar 2019 12:39:48 +0000 (18:09 +0530)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Mar 2019 05:46:56 +0000 (06:46 +0100)
This is needed to correctly handle NETunnelProviderManager's
isOnDemandEnabled property getting changed outside of the app.

Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/ActivateOnDemandViewModel.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift

index a40639337d21b8f1876a3f1935f6e557efff7f6b..55b9be288cd7ca42b2baa25ea08b061efa8b27f8 100644 (file)
@@ -49,20 +49,22 @@ class ActivateOnDemandViewModel {
 }
 
 extension ActivateOnDemandViewModel {
-    convenience init(option: ActivateOnDemandOption) {
+    convenience init(tunnel: TunnelContainer) {
         self.init()
-        switch option {
-        case .off:
-            break
-        case .wiFiInterfaceOnly(let onDemandSSIDOption):
-            isWiFiInterfaceEnabled = true
-            (ssidOption, selectedSSIDs) = ssidViewModel(from: onDemandSSIDOption)
-        case .nonWiFiInterfaceOnly:
-            isNonWiFiInterfaceEnabled = true
-        case .anyInterface(let onDemandSSIDOption):
-            isWiFiInterfaceEnabled = true
-            isNonWiFiInterfaceEnabled = true
-            (ssidOption, selectedSSIDs) = ssidViewModel(from: onDemandSSIDOption)
+        if tunnel.isActivateOnDemandEnabled {
+            switch tunnel.onDemandOption {
+            case .off:
+                break
+            case .wiFiInterfaceOnly(let onDemandSSIDOption):
+                isWiFiInterfaceEnabled = true
+                (ssidOption, selectedSSIDs) = ssidViewModel(from: onDemandSSIDOption)
+            case .nonWiFiInterfaceOnly:
+                isNonWiFiInterfaceEnabled = true
+            case .anyInterface(let onDemandSSIDOption):
+                isWiFiInterfaceEnabled = true
+                isNonWiFiInterfaceEnabled = true
+                (ssidOption, selectedSSIDs) = ssidViewModel(from: onDemandSSIDOption)
+            }
         }
     }
 
index 32393a9c82feda332198b4538ab45e4066596c5f..f198e0683fcde18c9fdd6a6eb341349fb3b752e8 100644 (file)
@@ -45,7 +45,7 @@ class TunnelDetailTableViewController: UITableViewController {
         self.tunnelsManager = tunnelsManager
         self.tunnel = tunnel
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
-        onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+        onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
         super.init(style: .grouped)
         loadSections()
         loadVisibleFields()
@@ -60,7 +60,7 @@ class TunnelDetailTableViewController: UITableViewController {
         }
         onDemandObservationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak self] tunnel, _ in
             // Handle On-Demand getting turned on/off outside of the app
-            self?.onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+            self?.onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
             self?.updateActivateOnDemandFields()
         }
     }
@@ -274,7 +274,7 @@ class TunnelDetailTableViewController: UITableViewController {
 extension TunnelDetailTableViewController: TunnelEditTableViewControllerDelegate {
     func tunnelSaved(tunnel: TunnelContainer) {
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
-        onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+        onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
         loadSections()
         loadVisibleFields()
         title = tunnel.name
index 943e7e5fa24cbc3c533793b09599c6e3e12fde41..9b9390c2c9dad04376dcba61e45924cf7b1d4069 100644 (file)
@@ -60,7 +60,7 @@ class TunnelEditTableViewController: UITableViewController {
         self.tunnelsManager = tunnelsManager
         self.tunnel = tunnel
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
-        onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+        onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
         super.init(style: .grouped)
         loadSections()
     }
index 06b505acf7fb994658f0b178feab0b60e652e360..9cd9c768d91bbb735beeb75ba27a0a9978fe5562 100644 (file)
@@ -97,7 +97,7 @@ class TunnelDetailTableViewController: NSViewController {
         self.tunnelsManager = tunnelsManager
         self.tunnel = tunnel
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
-        onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+        onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
         super.init(nibName: nil, bundle: nil)
         updateTableViewModelRowsBySection()
         updateTableViewModelRows()
@@ -500,7 +500,7 @@ extension TunnelDetailTableViewController: NSTableViewDelegate {
 extension TunnelDetailTableViewController: TunnelEditViewControllerDelegate {
     func tunnelSaved(tunnel: TunnelContainer) {
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
-        onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption)
+        onDemandViewModel = ActivateOnDemandViewModel(tunnel: tunnel)
         updateTableViewModelRowsBySection()
         updateTableViewModelRows()
         updateStatus()
index 2bba18951678ffbe1bd1abe05f24298644faef9b..51420c4b1ceaae2da3407bbef5a455d8ee944580 100644 (file)
@@ -99,7 +99,7 @@ class TunnelEditViewController: NSViewController {
     init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer?) {
         self.tunnelsManager = tunnelsManager
         self.tunnel = tunnel
-        self.onDemandViewModel = tunnel != nil ? ActivateOnDemandViewModel(option: tunnel!.onDemandOption) : ActivateOnDemandViewModel()
+        self.onDemandViewModel = tunnel != nil ? ActivateOnDemandViewModel(tunnel: tunnel!) : ActivateOnDemandViewModel()
         super.init(nibName: nil, bundle: nil)
     }