import AppKit import DesignSystem import NDIKit import OSLog import SwiftUI @main struct MusubiApp: App { @NSApplicationDelegateAdaptor private var appDelegate: AppDelegate var body: some SwiftUI.Scene { Window("Musubi", id: "main") { ContentView(sourceList: appDelegate.sourceList, coordinator: appDelegate.coordinator) .preferredColorScheme(.dark) } .defaultSize(width: 960, height: 600) Settings { SettingsView(coordinator: appDelegate.coordinator) .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 { static let ndi = Logger(subsystem: "studio.zielke.musubi", category: "ndi") static let audio = Logger(subsystem: "studio.zielke.musubi", category: "audio") static let remote = Logger(subsystem: "studio.zielke.musubi", category: "scene") }