From 0cbc7efeaaac9951979406f6f5c25149521ed6e1 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 14 Mar 2026 19:32:00 -0500 Subject: [PATCH] prevent motion recalibration when opening motion tuner --- web/src/views/settings/MotionTunerView.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/src/views/settings/MotionTunerView.tsx b/web/src/views/settings/MotionTunerView.tsx index 25d5f1469..fcdec9380 100644 --- a/web/src/views/settings/MotionTunerView.tsx +++ b/web/src/views/settings/MotionTunerView.tsx @@ -4,7 +4,7 @@ import useSWR from "swr"; import axios from "axios"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import AutoUpdatingCameraImage from "@/components/camera/AutoUpdatingCameraImage"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { Slider } from "@/components/ui/slider"; import { Label } from "@/components/ui/label"; import { @@ -63,6 +63,8 @@ export default function MotionTunerView({ improve_contrast: undefined, }); + const userInteractedRef = useRef(false); + const cameraConfig = useMemo(() => { if (config && selectedCamera) { return config.cameras[selectedCamera]; @@ -70,6 +72,7 @@ export default function MotionTunerView({ }, [config, selectedCamera]); useEffect(() => { + userInteractedRef.current = false; if (cameraConfig) { setMotionSettings({ threshold: cameraConfig.motion.threshold, @@ -87,24 +90,29 @@ export default function MotionTunerView({ }, [selectedCamera]); useEffect(() => { - if (!motionSettings.threshold) return; + if (!motionSettings.threshold || !userInteractedRef.current) return; sendMotionThreshold(motionSettings.threshold); }, [motionSettings.threshold, sendMotionThreshold]); useEffect(() => { - if (!motionSettings.contour_area) return; + if (!motionSettings.contour_area || !userInteractedRef.current) return; sendMotionContourArea(motionSettings.contour_area); }, [motionSettings.contour_area, sendMotionContourArea]); useEffect(() => { - if (motionSettings.improve_contrast === undefined) return; + if ( + motionSettings.improve_contrast === undefined || + !userInteractedRef.current + ) + return; sendImproveContrast(motionSettings.improve_contrast ? "ON" : "OFF"); }, [motionSettings.improve_contrast, sendImproveContrast]); const handleMotionConfigChange = (newConfig: Partial) => { + userInteractedRef.current = true; setMotionSettings((prevConfig) => ({ ...prevConfig, ...newConfig })); setUnsavedChanges(true); setChangedValue(true);