RedditAppApp.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Combine
  2. import SwiftUI
  3. @main
  4. struct RedditAppApp: App {
  5. @NSApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
  6. @StateObject private var subscriptions = SubscriptionManager()
  7. @StateObject private var appRating = AppRatingManager()
  8. @State private var appearanceManager = AppearanceManager.shared
  9. @State private var splashViewModel = SplashViewModel()
  10. @State private var session = AppSessionState()
  11. var body: some Scene {
  12. Window(AppLinks.appName, id: "main-window") {
  13. RootView(session: session, splashViewModel: splashViewModel)
  14. .environmentObject(subscriptions)
  15. .environmentObject(appRating)
  16. .environment(appearanceManager)
  17. .preferredColorScheme(appearanceManager.isDarkMode ? .dark : .light)
  18. .background {
  19. MainWindowLifecycleConfigurator()
  20. }
  21. .task {
  22. subscriptions.start()
  23. PaywallConfigService.shared.start()
  24. }
  25. }
  26. .defaultSize(width: AppWindow.width, height: AppWindow.height)
  27. .defaultPosition(.center)
  28. .windowStyle(.hiddenTitleBar)
  29. .commands {
  30. CommandGroup(replacing: .newItem) {}
  31. MainWindowReopenCommands()
  32. }
  33. }
  34. }
  35. private struct MainWindowReopenCommands: Commands {
  36. @Environment(\.openWindow) private var openWindow
  37. var body: some Commands {
  38. CommandGroup(after: .windowList) {
  39. Button("Show Main Window") {
  40. openWindow(id: "main-window")
  41. (NSApp.delegate as? AppDelegate)?.showMainWindow()
  42. }
  43. .keyboardShortcut("0", modifiers: .command)
  44. }
  45. }
  46. }