diff options
author | Jeroen Leenarts <jeroen.leenarts@gmail.com> | 2018-09-15 21:23:47 +0200 |
---|---|---|
committer | Jeroen Leenarts <jeroen.leenarts@gmail.com> | 2018-09-15 21:23:47 +0200 |
commit | 3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be (patch) | |
tree | 8003fd933698f5430d3a2fb881b0ae0bafc6b95b /WireGuard | |
parent | Re-center app icon. (diff) | |
download | wireguard-apple-3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be.tar.xz wireguard-apple-3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be.zip |
Prevent crash on add and deletion of config.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r-- | WireGuard/Coordinators/AppCoordinator.swift | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/WireGuard/Coordinators/AppCoordinator.swift b/WireGuard/Coordinators/AppCoordinator.swift index 460a6d0..0de4271 100644 --- a/WireGuard/Coordinators/AppCoordinator.swift +++ b/WireGuard/Coordinators/AppCoordinator.swift @@ -328,42 +328,49 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate { } func connect(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) { - let manager = self.providerManager(for: tunnel)! - let block = { - switch manager.connection.status { - case .invalid, .disconnected: - self.connect(tunnel: tunnel) - default: - break + _ = refreshProviderManagers().then { () -> Promise<Void> in + let manager = self.providerManager(for: tunnel)! + let block = { + switch manager.connection.status { + case .invalid, .disconnected: + self.connect(tunnel: tunnel) + default: + break + } } - } - if manager.connection.status == .invalid { - manager.loadFromPreferences { (_) in + if manager.connection.status == .invalid { + manager.loadFromPreferences { (_) in + block() + } + } else { block() } - } else { - block() + + return Promise.value(()) } } func disconnect(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) { - let manager = self.providerManager(for: tunnel)! - let block = { - switch manager.connection.status { - case .connected, .connecting: - self.disconnect(tunnel: tunnel) - default: - break + _ = refreshProviderManagers().then { () -> Promise<Void> in + let manager = self.providerManager(for: tunnel)! + let block = { + switch manager.connection.status { + case .connected, .connecting: + self.disconnect(tunnel: tunnel) + default: + break + } } - } - if manager.connection.status == .invalid { - manager.loadFromPreferences { (_) in + if manager.connection.status == .invalid { + manager.loadFromPreferences { (_) in + block() + } + } else { block() } - } else { - block() + return Promise.value(()) } } |