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
|
/// Incrementing this value creates a new camera session with fresh AVCapturePhotoOutput
|
||||||
@State private var cameraSessionKey = UUID()
|
@State private var cameraSessionKey = UUID()
|
||||||
|
|
||||||
/// Track camera position to detect changes when settings sheet closes
|
/// Track camera position (as string) to detect changes when settings sheet closes
|
||||||
@State private var lastCameraPosition: CameraPosition = .front
|
@State private var lastCameraPositionRaw: String = "front"
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack {
|
ZStack {
|
||||||
@ -75,7 +75,7 @@ struct ContentView: View {
|
|||||||
.animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview)
|
.animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview)
|
||||||
.onAppear {
|
.onAppear {
|
||||||
// Initialize tracking of camera position
|
// Initialize tracking of camera position
|
||||||
lastCameraPosition = settings.cameraPosition
|
lastCameraPositionRaw = settings.cameraPositionRaw
|
||||||
}
|
}
|
||||||
.onChange(of: settings.isRingLightEnabled) { _, newValue in
|
.onChange(of: settings.isRingLightEnabled) { _, newValue in
|
||||||
if settings.isFlashSyncedWithRingLight {
|
if settings.isFlashSyncedWithRingLight {
|
||||||
@ -89,8 +89,11 @@ struct ContentView: View {
|
|||||||
}
|
}
|
||||||
.sheet(isPresented: $showSettings, onDismiss: {
|
.sheet(isPresented: $showSettings, onDismiss: {
|
||||||
// Check if camera position changed while settings was open
|
// Check if camera position changed while settings was open
|
||||||
if settings.cameraPosition != lastCameraPosition {
|
let currentRaw = settings.cameraPositionRaw
|
||||||
lastCameraPosition = settings.cameraPosition
|
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
|
// Force camera session recreation with new position
|
||||||
cameraSessionKey = UUID()
|
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 {
|
var cameraPosition: CameraPosition {
|
||||||
get {
|
get {
|
||||||
if cloudSync.data.cameraPositionRaw == "front" {
|
let raw = cloudSync.data.cameraPositionRaw
|
||||||
return .front
|
let position: CameraPosition = raw == "front" ? .front : .back
|
||||||
} else {
|
Design.debugLog("cameraPosition getter: raw='\(raw)' -> \(position)")
|
||||||
return .back
|
return position
|
||||||
}
|
|
||||||
}
|
}
|
||||||
set {
|
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