diff --git a/SelfieCam/Features/Camera/ContentView.swift b/SelfieCam/Features/Camera/ContentView.swift index 4e68edf..61576ec 100644 --- a/SelfieCam/Features/Camera/ContentView.swift +++ b/SelfieCam/Features/Camera/ContentView.swift @@ -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() } diff --git a/SelfieCam/Features/Settings/SettingsViewModel.swift b/SelfieCam/Features/Settings/SettingsViewModel.swift index 656e83a..37b4061 100644 --- a/SelfieCam/Features/Settings/SettingsViewModel.swift +++ b/SelfieCam/Features/Settings/SettingsViewModel.swift @@ -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 } } }