krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v3.9.0: 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}