From 31463fa4bfe60f60194814b2ced775f90f420791 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 12 Feb 2024 10:38:57 -0700 Subject: [PATCH] Be more efficient about updating events --- web/src/pages/Live.tsx | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/web/src/pages/Live.tsx b/web/src/pages/Live.tsx index 51a0196ca..5d5bc58b4 100644 --- a/web/src/pages/Live.tsx +++ b/web/src/pages/Live.tsx @@ -1,22 +1,46 @@ +import { useFrigateEvents } from "@/api/ws"; import { AnimatedEventThumbnail } from "@/components/image/AnimatedEventThumbnail"; import LivePlayer from "@/components/player/LivePlayer"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { TooltipProvider } from "@/components/ui/tooltip"; import { Event as FrigateEvent } from "@/types/event"; import { FrigateConfig } from "@/types/frigateConfig"; -import { useMemo } from "react"; +import { useEffect, useMemo } from "react"; import useSWR from "swr"; function Live() { const { data: config } = useSWR("config"); // recent events - - const { data: allEvents } = useSWR( + const { payload: eventUpdate } = useFrigateEvents(); + const { data: allEvents, mutate: updateEvents } = useSWR( ["events", { limit: 10 }], - { refreshInterval: 60000 } + { revalidateOnFocus: false } ); + useEffect(() => { + if (!eventUpdate) { + return; + } + + // if event is ended and was saved, update events list + if ( + eventUpdate.type == "end" && + (eventUpdate.after.has_clip || eventUpdate.after.has_snapshot) + ) { + updateEvents(); + return; + } + + // if event is updated and has become a saved event, update events list + if ( + !(eventUpdate.before.has_clip || eventUpdate.before.has_snapshot) && + (eventUpdate.after.has_clip || eventUpdate.after.has_snapshot) + ) { + updateEvents(); + } + }, [eventUpdate]); + const events = useMemo(() => { if (!allEvents) { return [];