import SwiftUI import Photos @main struct NASBackupApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var store = ConnectionStore.shared @StateObject private var engine = BackupEngine.shared @StateObject private var lanMonitor = LANMonitor.shared @StateObject private var statusService = BackupStatusService.shared var body: some Scene { WindowGroup { RootView() .environmentObject(store) .environmentObject(engine) .environmentObject(lanMonitor) .environmentObject(statusService) .preferredColorScheme(store.appearanceMode.resolvedScheme) } } } struct RootView: View { @EnvironmentObject var store: ConnectionStore @EnvironmentObject var lanMonitor: LANMonitor var body: some View { Group { if store.savedConnection == nil { ConnectView() } else if !store.isSessionActive { LoginView() } else if store.savedConnection?.remotePath == "/" { FolderSetupView() } else if !store.onboardingPhotoShown { PhotoPermissionView() } else { MainTabView() } } .animation(.spring(response: 0.4, dampingFraction: 0.85), value: store.isSessionActive) .animation(.spring(response: 0.4, dampingFraction: 0.85), value: store.savedConnection?.remotePath) .animation(.spring(response: 0.4, dampingFraction: 0.85), value: store.onboardingPhotoShown) .task(id: store.isSessionActive) { guard store.isSessionActive, let conn = store.savedConnection else { return } await lanMonitor.checkNASReachability(host: conn.host, port: conn.port) } } }