@@ -19,6 +19,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
1919 // MARK: - Component Managers
2020 private let mistServerManager = MistServerManager . shared
2121
22+ /// Re-detect all installations and resolve active mode
23+ func redetectServerMode( ) {
24+ let installations = mistServerManager. detectAllInstallations ( )
25+ let preference = mistServerManager. loadPreferredInstallation ( )
26+ appState. discoveredInstallations = installations
27+ appState. serverMode = mistServerManager. resolveActiveMode (
28+ installations: installations, preference: preference)
29+ }
30+
2231 override init ( ) {
2332 super. init ( )
2433 }
@@ -37,8 +46,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
3746 // 1) Create the menu bar icon
3847 setupStatusBarIcon ( )
3948
40- // 2) Detect server mode and running state
41- appState. serverMode = mistServerManager. detectServerMode ( )
49+ // 2) Detect server installations and resolve active mode
50+ let installations = mistServerManager. detectAllInstallations ( )
51+ let preference = mistServerManager. loadPreferredInstallation ( )
52+ appState. discoveredInstallations = installations
53+ appState. serverMode = mistServerManager. resolveActiveMode (
54+ installations: installations, preference: preference)
4255 appState. serverRunning = mistServerManager. isMistServerRunning ( mode: appState. serverMode)
4356
4457 // 3) Initial data refresh with auth check (capabilities included in main fetch)
@@ -55,11 +68,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
5568 // 5) Schedule regular data updates (every 10 seconds)
5669 activeStreamsTimer = Timer . scheduledTimer ( withTimeInterval: 10 , repeats: true ) { [ weak self] _ in
5770 guard let self = self else { return }
58- // Re-detect mode on background queue to avoid blocking main thread
71+ // Re-detect installations on background queue to avoid blocking main thread
5972 DispatchQueue . global ( qos: . utility) . async {
60- let mode = self . mistServerManager. detectServerMode ( )
73+ let installations = self . mistServerManager. detectAllInstallations ( )
74+ let preference = self . mistServerManager. loadPreferredInstallation ( )
75+ let mode = self . mistServerManager. resolveActiveMode (
76+ installations: installations, preference: preference)
6177 let running = self . mistServerManager. isMistServerRunning ( mode: mode)
6278 DispatchQueue . main. async {
79+ self . appState. discoveredInstallations = installations
6380 self . appState. serverMode = mode
6481 self . appState. serverRunning = running
6582 if running {
@@ -283,7 +300,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
283300 self ? . appState. serverRunning = !success
284301 if success {
285302 // Re-detect mode after stopping
286- self ? . appState . serverMode = self ? . mistServerManager . detectServerMode ( ) ?? . notFound
303+ self ? . redetectServerMode ( )
287304 }
288305 }
289306 }
@@ -302,7 +319,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
302319 DispatchQueue . main. async {
303320 self ? . appState. serverRunning = success
304321 if success {
305- self ? . appState . serverMode = self ? . mistServerManager . detectServerMode ( ) ?? mode
322+ self ? . redetectServerMode ( )
306323 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 3 ) {
307324 self ? . checkAuthAndRefresh ( )
308325 }
0 commit comments