Add BeamScribe iOS app for real-time transcription with multipeer connectivity. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
57 lines
1.7 KiB
Swift
57 lines
1.7 KiB
Swift
//
|
|
// BeamScribeApp.swift
|
|
// BeamScribe
|
|
//
|
|
// Created by Jared on 12/9/25.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SwiftData
|
|
|
|
@main
|
|
struct BeamScribeApp: App {
|
|
@StateObject private var sessionState = SessionState()
|
|
@StateObject private var transcriptionManager = TranscriptionManager()
|
|
@StateObject private var multipeerManager = MultipeerManager()
|
|
@StateObject private var fileManager = FileStorageManager()
|
|
@StateObject private var subscriptionManager = SubscriptionManager()
|
|
@Environment(\.scenePhase) private var scenePhase
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
ContentView()
|
|
.environmentObject(sessionState)
|
|
.environmentObject(transcriptionManager)
|
|
.environmentObject(multipeerManager)
|
|
.environmentObject(fileManager)
|
|
.environmentObject(subscriptionManager)
|
|
// Enforce light mode for now to ensure consistency
|
|
.preferredColorScheme(.light)
|
|
.onChange(of: scenePhase) { oldPhase, newPhase in
|
|
handleScenePhaseChange(from: oldPhase, to: newPhase)
|
|
}
|
|
}
|
|
}
|
|
|
|
private func handleScenePhaseChange(from oldPhase: ScenePhase, to newPhase: ScenePhase) {
|
|
switch newPhase {
|
|
case .active:
|
|
// App became active
|
|
// Keep awake setting is handled in SettingsView
|
|
break
|
|
|
|
case .inactive:
|
|
// App becoming inactive (transitioning)
|
|
break
|
|
|
|
case .background:
|
|
// App went to background
|
|
// Audio session interruption handling is done in TranscriptionManager
|
|
break
|
|
|
|
@unknown default:
|
|
break
|
|
}
|
|
}
|
|
}
|