krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
remove-splash-highlighter: Hutch/App/HutchApp.swift · raw
1import SwiftUI
2import os
3
4@main
5struct HutchApp: App {
6 private let deepLinkLogger = Logger(subsystem: "net.cleberg.Hutch", category: "DeepLink")
7 @State private var appState = AppState()
8 @State private var networkMonitor = NetworkMonitor()
9 @AppStorage(AppStorageKeys.appTheme, store: .standard) private var appTheme: AppTheme = .system
10 @AppStorage(AppStorageKeys.displayDensity, store: .standard) private var displayDensity: DisplayDensity = .standard
11
12 var body: some Scene {
13 WindowGroup {
14 RootView()
15 .environment(appState)
16 .environment(networkMonitor)
17 .environment(\.displayDensity, displayDensity)
18 .environment(\.isAMOLEDTheme, appTheme == .amoled)
19 .environment(\.defaultMinListRowHeight, displayDensity == .compact ? 36 : 44)
20 .background(appTheme == .amoled ? Color.black : Color.clear)
21 .preferredColorScheme(appTheme.colorScheme)
22 .onOpenURL { url in
23 deepLinkLogger.info("Received URL: \(url.absoluteString, privacy: .public)")
24 if let link = DeepLink(url: url) {
25 deepLinkLogger.info("Parsed deep link: \(String(describing: link), privacy: .public)")
26 appState.pendingDeepLink = link
27 } else {
28 deepLinkLogger.error("Rejected URL: \(url.absoluteString, privacy: .public)")
29 }
30 }
31 .onChange(of: HutchIntentNavigator.shared.pendingRoute) { _, route in
32 guard let route else { return }
33 HutchIntentNavigator.shared.pendingRoute = nil
34 appState.open(route)
35 }
36 }
37 }
38}