Add debug logging for camera position switch troubleshooting
- Use raw string comparison instead of CameraPosition enum - Add debug logs to trace setting changes and sheet dismiss - Add cameraPositionRaw accessor to SettingsViewModel
This commit is contained in:
parent
55c4d7e05a
commit
9c88590926
@ -21,8 +21,8 @@ struct ContentView: View {
|
||||
/// Incrementing this value creates a new camera session with fresh AVCapturePhotoOutput
|
||||
@State private var cameraSessionKey = UUID()
|
||||
|
||||
/// Track camera position to detect changes when settings sheet closes
|
||||
@State private var lastCameraPosition: CameraPosition = .front
|
||||
/// Track camera position (as string) to detect changes when settings sheet closes
|
||||
@State private var lastCameraPositionRaw: String = "front"
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@ -75,7 +75,7 @@ struct ContentView: View {
|
||||
.animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview)
|
||||
.onAppear {
|
||||
// Initialize tracking of camera position
|
||||
lastCameraPosition = settings.cameraPosition
|
||||
lastCameraPositionRaw = settings.cameraPositionRaw
|
||||
}
|
||||
.onChange(of: settings.isRingLightEnabled) { _, newValue in
|
||||
if settings.isFlashSyncedWithRingLight {
|
||||
@ -89,8 +89,11 @@ struct ContentView: View {
|
||||
}
|
||||
.sheet(isPresented: $showSettings, onDismiss: {
|
||||
// Check if camera position changed while settings was open
|
||||
if settings.cameraPosition != lastCameraPosition {
|
||||
lastCameraPosition = settings.cameraPosition
|
||||
let currentRaw = settings.cameraPositionRaw
|
||||
Design.debugLog("Settings dismissed - current raw: '\(currentRaw)', last raw: '\(lastCameraPositionRaw)'")
|
||||
if currentRaw != lastCameraPositionRaw {
|
||||
Design.debugLog("Camera position changed! Recreating camera session...")
|
||||
lastCameraPositionRaw = currentRaw
|
||||
// Force camera session recreation with new position
|
||||
cameraSessionKey = UUID()
|
||||
}
|
||||
|
||||
@ -288,16 +288,22 @@ final class SettingsViewModel: RingLightConfigurable {
|
||||
}
|
||||
}
|
||||
|
||||
/// Raw camera position string for comparison (avoids MijickCamera enum issues)
|
||||
var cameraPositionRaw: String {
|
||||
cloudSync.data.cameraPositionRaw
|
||||
}
|
||||
|
||||
var cameraPosition: CameraPosition {
|
||||
get {
|
||||
if cloudSync.data.cameraPositionRaw == "front" {
|
||||
return .front
|
||||
} else {
|
||||
return .back
|
||||
}
|
||||
let raw = cloudSync.data.cameraPositionRaw
|
||||
let position: CameraPosition = raw == "front" ? .front : .back
|
||||
Design.debugLog("cameraPosition getter: raw='\(raw)' -> \(position)")
|
||||
return position
|
||||
}
|
||||
set {
|
||||
updateSettings { $0.cameraPositionRaw = newValue == .front ? "front" : "back" }
|
||||
let rawValue = newValue == .front ? "front" : "back"
|
||||
Design.debugLog("cameraPosition setter: \(newValue) -> raw='\(rawValue)'")
|
||||
updateSettings { $0.cameraPositionRaw = rawValue }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user