HuggingChat-Mac/HuggingChat_MacApp.swift (89 lines of code) (raw):

// // HuggingChat_MacApp.swift // HuggingChat-Mac // // Created by Cyril Zakka on 8/16/24. // import SwiftUI import Combine import Sparkle @main struct HuggingChat_MacApp: App { @State var coordinatorModel = CoordinatorModel() @State var hfChatSession = HuggingChatSession() @Environment(\.openWindow) private var openWindow @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @AppStorage("userLoggedIn") private var userLoggedIn: Bool = false @AppStorage("onboardingDone") private var onboardingDone: Bool = false @AppStorage("appearance") private var appearance: Appearance = .auto private let updaterController: SPUStandardUpdaterController init() { updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil) } var body: some Scene { // Intro view Window("Login", id: "login", content: { // TODO: Fix this if !userLoggedIn || !onboardingDone { OnboardingView() .frame(width: 300, height: 400) // .toolbar(removing: .title) .toolbarBackground(.hidden, for: .windowToolbar) // .windowFullScreenBehavior(.disabled) .environment(coordinatorModel) .preferredColorScheme(colorScheme(for: appearance)) .onOpenURL { url in if let component = URLComponents(string: url.absoluteString), let code = component.queryItems?.first(where: { $0.name == "code"})?.value, let state = component.queryItems?.first(where: { $0.name == "state"})?.value { coordinatorModel.validateSignup(code: code, state: state) } } } }) .windowResizability(.contentSize) .windowStyle(.hiddenTitleBar) // About Window("About", id: "about", content: { AboutView() .frame(width: 450, height: 175) // .toolbar(removing: .title) .toolbarBackground(.hidden, for: .windowToolbar) // .containerBackground(.thickMaterial, for: .window) // .windowMinimizeBehavior(.disabled) .preferredColorScheme(colorScheme(for: appearance)) }) .windowResizability(.contentSize) // .restorationBehavior(.disabled) // Settings Settings { SettingsView() .environment(hfChatSession) .environment(appDelegate.themeEngine) .environment(appDelegate.conversationModel) .environment(appDelegate.modelManager) .environment(appDelegate.audioModelManager) .preferredColorScheme(colorScheme(for: appearance)) } .windowResizability(.contentSize) // .restorationBehavior(.disabled) // Command Bar .commands { CommandGroup(after: .appSettings) { CheckForUpdatesView(updater: updaterController.updater) } CommandGroup(replacing: CommandGroupPlacement.appInfo) { Button(action: { for window in NSApplication.shared.windows { if window.identifier?.rawValue == "about" { window.makeKeyAndOrderFront(nil) return } } openWindow(id: "about") }) { Text("About \(Bundle.main.appName)") } } CommandGroup(replacing: .help) { Button(action: { openWindow(id: "login") }) { Text("Open Login") } } } } private func colorScheme(for appearance: Appearance) -> ColorScheme? { switch appearance { case .light: return .light case .dark: return .dark case .auto: return nil } } }