aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/Coordinators/AppCoordinator.swift
diff options
context:
space:
mode:
authorJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-05 20:10:09 +0200
committerJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-05 20:10:09 +0200
commitb7755b97a37757f318d0af11f26b591e89eb7ab6 (patch)
tree760f20cc9ad7eb609ad5c194eb3ae6f2112bd3d1 /WireGuard/Coordinators/AppCoordinator.swift
parentImport of zip. (diff)
downloadwireguard-apple-b7755b97a37757f318d0af11f26b591e89eb7ab6.tar.xz
wireguard-apple-b7755b97a37757f318d0af11f26b591e89eb7ab6.zip
Make sure to refresh provider managers after saving.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--WireGuard/Coordinators/AppCoordinator.swift62
1 files changed, 37 insertions, 25 deletions
diff --git a/WireGuard/Coordinators/AppCoordinator.swift b/WireGuard/Coordinators/AppCoordinator.swift
index 7ed9025..c3595c6 100644
--- a/WireGuard/Coordinators/AppCoordinator.swift
+++ b/WireGuard/Coordinators/AppCoordinator.swift
@@ -10,6 +10,7 @@ import Foundation
import NetworkExtension
import os.log
import ZIPFoundation
+import PromiseKit
import CoreData
import BNRCoreDataStack
@@ -64,36 +65,44 @@ class AppCoordinator: RootViewCoordinator {
/// Starts the coordinator
public func start() {
- NETunnelProviderManager.loadAllFromPreferences { [weak self] (managers, error) in
- if let error = error {
- os_log("Unable to load provider managers: %{public}@", log: Log.general, type: .error, error.localizedDescription)
- }
- self?.providerManagers = managers
- }
+ _ = refreshProviderManagers().then { () -> Promise<Void> in
+ self.persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
+ self.persistentContainer.loadPersistentStores { [weak self] (_, error) in
+ if let error = error {
+ print("Unable to Load Persistent Store. \(error), \(error.localizedDescription)")
- persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
- persistentContainer.loadPersistentStores { [weak self] (_, error) in
- if let error = error {
- print("Unable to Load Persistent Store. \(error), \(error.localizedDescription)")
-
- } else {
- DispatchQueue.main.async {
- //start
- if let tunnelsTableViewController = self?.storyboard.instantiateViewController(type: TunnelsTableViewController.self) {
- self?.tunnelsTableViewController = tunnelsTableViewController
- self?.tunnelsTableViewController.viewContext = self?.persistentContainer.viewContext
- self?.tunnelsTableViewController.delegate = self
- self?.navigationController.viewControllers = [tunnelsTableViewController]
- do {
- if let context = self?.persistentContainer.viewContext, try Tunnel.countInContext(context) == 0 {
- print("No tunnels ... yet")
+ } else {
+ DispatchQueue.main.async {
+ //start
+ if let tunnelsTableViewController = self?.storyboard.instantiateViewController(type: TunnelsTableViewController.self) {
+ self?.tunnelsTableViewController = tunnelsTableViewController
+ self?.tunnelsTableViewController.viewContext = self?.persistentContainer.viewContext
+ self?.tunnelsTableViewController.delegate = self
+ self?.navigationController.viewControllers = [tunnelsTableViewController]
+ do {
+ if let context = self?.persistentContainer.viewContext, try Tunnel.countInContext(context) == 0 {
+ print("No tunnels ... yet")
+ }
+ } catch {
+ self?.showError(error)
}
- } catch {
- self?.showError(error)
}
}
}
}
+ return Promise.value(())
+ }
+ }
+
+ func refreshProviderManagers() -> Promise<Void> {
+ return Promise { (resolver) in
+ NETunnelProviderManager.loadAllFromPreferences { [weak self] (managers, error) in
+ if let error = error {
+ os_log("Unable to load provider managers: %{public}@", log: Log.general, type: .error, error.localizedDescription)
+ }
+ self?.providerManagers = managers
+ resolver.fulfill(())
+ }
}
}
@@ -458,7 +467,10 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
os_log("saved preferences", log: Log.general, type: .info)
}
- navigationController.popToRootViewController(animated: true)
+ _ = refreshProviderManagers().then { () -> Promise<Void> in
+ self.navigationController.popToRootViewController(animated: true)
+ return Promise.value(())
+ }
}
}