From ef05f10b44c2b4363fd2ff8ec34e7575964d07f7 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 23 Mar 2024 12:29:05 -0600 Subject: [PATCH] Increase efficiency --- web/src/hooks/use-camera-activity.ts | 33 +++++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/web/src/hooks/use-camera-activity.ts b/web/src/hooks/use-camera-activity.ts index 957de43c3..01406d29a 100644 --- a/web/src/hooks/use-camera-activity.ts +++ b/web/src/hooks/use-camera-activity.ts @@ -77,22 +77,39 @@ export function useCameraMotionTimestamps( ) { const timestamps = useMemo(() => { const seekableTimestamps = []; + let lastEventIdx = 0; + let lastMotionIdx = 0; + for (let i = timeRange.after; i <= timeRange.before; i += 0.5) { if (!motionOnly) { seekableTimestamps.push(i); } else { - if ( - events.find((seg) => seg.start_time <= i && seg.end_time >= i) != - undefined - ) { + const relevantEventIdx = events.findIndex((seg, segIdx) => { + if (segIdx < lastEventIdx) { + return false; + } + + return seg.start_time <= i && seg.end_time >= i; + }); + + if (relevantEventIdx != -1) { + lastEventIdx = relevantEventIdx; continue; } - const relevantMotion = motion.find( - (mot) => mot.start_time <= i && mot.start_time + 15 >= i, - ); + const relevantMotionIdx = motion.findIndex((mot, motIdx) => { + if (motIdx < lastMotionIdx) { + return false; + } + + return mot.start_time <= i && mot.start_time + 15 >= i; + }); + + if (relevantMotionIdx == -1 || motion[relevantMotionIdx].motion == 0) { + if (relevantMotionIdx != -1) { + lastMotionIdx = relevantMotionIdx; + } - if (!relevantMotion || relevantMotion.motion == 0) { continue; }