From b7755b97a37757f318d0af11f26b591e89eb7ab6 Mon Sep 17 00:00:00 2001 From: Jeroen Leenarts Date: Wed, 5 Sep 2018 20:10:09 +0200 Subject: Make sure to refresh provider managers after saving. Signed-off-by: Jason A. Donenfeld --- WireGuard/Coordinators/AppCoordinator.swift | 62 +++++++++++++++++------------ 1 file changed, 37 insertions(+), 25 deletions(-) (limited to 'WireGuard/Coordinators') 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 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 { + 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 in + self.navigationController.popToRootViewController(animated: true) + return Promise.value(()) + } } } -- cgit v1.2.3-59-g8ed1b