Make sure to refresh provider managers after saving.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jeroen Leenarts
2018-09-05 20:10:09 +02:00
parent 56c543f1fc
commit b7755b97a3
+22 -10
View File
@@ -10,6 +10,7 @@ import Foundation
import NetworkExtension import NetworkExtension
import os.log import os.log
import ZIPFoundation import ZIPFoundation
import PromiseKit
import CoreData import CoreData
import BNRCoreDataStack import BNRCoreDataStack
@@ -64,15 +65,9 @@ class AppCoordinator: RootViewCoordinator {
/// Starts the coordinator /// Starts the coordinator
public func start() { public func start() {
NETunnelProviderManager.loadAllFromPreferences { [weak self] (managers, error) in _ = refreshProviderManagers().then { () -> Promise<Void> in
if let error = error { self.persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
os_log("Unable to load provider managers: %{public}@", log: Log.general, type: .error, error.localizedDescription) self.persistentContainer.loadPersistentStores { [weak self] (_, error) in
}
self?.providerManagers = managers
}
persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
persistentContainer.loadPersistentStores { [weak self] (_, error) in
if let error = error { if let error = error {
print("Unable to Load Persistent Store. \(error), \(error.localizedDescription)") print("Unable to Load Persistent Store. \(error), \(error.localizedDescription)")
@@ -95,6 +90,20 @@ class AppCoordinator: RootViewCoordinator {
} }
} }
} }
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(())
}
}
} }
func importConfig(config: URL) throws { func importConfig(config: URL) throws {
@@ -458,7 +467,10 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
os_log("saved preferences", log: Log.general, type: .info) 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(())
}
} }
} }