fix: start at launch, not when the main window appears

As a login item macOS launched Musubi without its window, so the SwiftUI
.task never ran: no outputs, no remote control after a reboot. An app
delegate now starts discovery and the coordinator in applicationDidFinishLaunching.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main
Samuel Zielke 2 days ago
parent d9b8e46335
commit c28f061799

@ -1,3 +1,4 @@
import AppKit
import DesignSystem import DesignSystem
import NDIKit import NDIKit
import OSLog import OSLog
@ -5,31 +6,35 @@ import SwiftUI
@main @main
struct MusubiApp: App { struct MusubiApp: App {
@State private var sourceList = SourceListModel() @NSApplicationDelegateAdaptor private var appDelegate: AppDelegate
@State private var coordinator: Coordinator = {
MainActor.assumeIsolated {
Coordinator(settings: AppSettings(), outputs: OutputController(), audio: AudioController())
}
}()
var body: some SwiftUI.Scene { var body: some SwiftUI.Scene {
Window("Musubi", id: "main") { Window("Musubi", id: "main") {
ContentView(sourceList: sourceList, coordinator: coordinator) ContentView(sourceList: appDelegate.sourceList, coordinator: appDelegate.coordinator)
.preferredColorScheme(.dark) .preferredColorScheme(.dark)
.task {
sourceList.start()
await coordinator.start()
}
} }
.defaultSize(width: 960, height: 600) .defaultSize(width: 960, height: 600)
Settings { Settings {
SettingsView(coordinator: coordinator) SettingsView(coordinator: appDelegate.coordinator)
.preferredColorScheme(.dark) .preferredColorScheme(.dark)
} }
} }
} }
/// Starts discovery, outputs, audio and remote control at launch – independent of any window.
/// As a login item macOS may launch Musubi without opening its window.
@MainActor
final class AppDelegate: NSObject, NSApplicationDelegate {
let sourceList = SourceListModel()
let coordinator = Coordinator(settings: AppSettings(), outputs: OutputController(), audio: AudioController())
func applicationDidFinishLaunching(_ notification: Notification) {
sourceList.start()
Task { await coordinator.start() }
}
}
enum Log { enum Log {
static let ndi = Logger(subsystem: "studio.zielke.musubi", category: "ndi") static let ndi = Logger(subsystem: "studio.zielke.musubi", category: "ndi")
static let audio = Logger(subsystem: "studio.zielke.musubi", category: "audio") static let audio = Logger(subsystem: "studio.zielke.musubi", category: "audio")

Loading…
Cancel
Save

Powered by TurnKey Linux.