From bb695fbf53ea52c25bb27c241e3bf79b2cce7e1c Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Mon, 6 Jul 2020 10:36:44 -0400 Subject: [PATCH] Fix crash when MongoController connection fails --- .../Windows/DatabaseWindowController.swift | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/MongoView/Windows/DatabaseWindowController.swift b/MongoView/Windows/DatabaseWindowController.swift index 7625dd9..75b127e 100644 --- a/MongoView/Windows/DatabaseWindowController.swift +++ b/MongoView/Windows/DatabaseWindowController.swift @@ -28,23 +28,25 @@ class DatabaseWindowController: NSWindowController { override func windowDidLoad() { super.windowDidLoad() - if mongoController == nil { + let setupMongo = mongoController == nil + if setupMongo { mongoController = MongoController(connectionString: "mongodb://localhost:27017") - mongoController.setup() } mongoController.statusDidChange.append({ [weak self] (status) in guard let self = self else { return } self.updateStatusText(status) + + if status == .success { + DispatchQueue.main.async { + self.initializeUI() + } + } }) self.updateStatusText(mongoController.status) - - databaseViewController = DatabaseViewController(mongoController: mongoController) - contentViewController = databaseViewController - - if let initialCollection = initialCollection { - databaseViewController.showCollection(initialCollection) + if setupMongo { + mongoController.setup() } - + titleObservation = observe(\.contentViewController?.title) { [unowned self] (_, _) in self.updateWindowTitle() } @@ -60,7 +62,7 @@ class DatabaseWindowController: NSWindowController { } private func updateWindowTitle() { - window?.title = databaseViewController.title ?? "MongoView" + window?.title = databaseViewController?.title ?? "MongoView" } private func updateStatusText(_ status: MongoController.Status) { @@ -75,6 +77,15 @@ class DatabaseWindowController: NSWindowController { } } + private func initializeUI() { + databaseViewController = DatabaseViewController(mongoController: mongoController) + contentViewController = databaseViewController + + if let initialCollection = initialCollection { + databaseViewController.showCollection(initialCollection) + } + } + } extension NSToolbarItem.Identifier {