@ -1,3 +1,4 @@
import AppKit
import DesignSystem
import NDIKit
import OSLog
@ -5,31 +6,35 @@ import SwiftUI
@ main
struct MusubiApp : App {
@ State private var sourceList = SourceListModel ( )
@ State private var coordinator : Coordinator = {
MainActor . assumeIsolated {
Coordinator ( settings : AppSettings ( ) , outputs : OutputController ( ) , audio : AudioController ( ) )
}
} ( )
@ NSApplicationDelegateAdaptor private var appDelegate : AppDelegate
var body : some SwiftUI . Scene {
Window ( " Musubi " , id : " main " ) {
ContentView ( sourceList : sourceList, coordinator : coordinator )
ContentView ( sourceList : appDelegate . sourceList , coordinator : appDelegate . coordinator )
. preferredColorScheme ( . dark )
. task {
sourceList . start ( )
await coordinator . start ( )
}
}
. defaultSize ( width : 960 , height : 600 )
Settings {
SettingsView ( coordinator : coordinator)
SettingsView ( coordinator : appDelegate. coordinator)
. preferredColorScheme ( . dark )
}
}
}
// / S t a r t s d i s c o v e r y , o u t p u t s , a u d i o a n d r e m o t e c o n t r o l a t l a u n c h – i n d e p e n d e n t o f a n y w i n d o w .
// / A s a l o g i n i t e m m a c O S m a y l a u n c h M u s u b i w i t h o u t o p e n i n g i t s w i n d o w .
@ 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 " )