From b38e5768e32a33340d2f3909d0108472a45f0faf Mon Sep 17 00:00:00 2001 From: mrjvs Date: Fri, 24 Nov 2023 20:05:22 +0100 Subject: [PATCH] only make new save item if difference --- .../player/internals/ProgressSaver.tsx | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/components/player/internals/ProgressSaver.tsx b/src/components/player/internals/ProgressSaver.tsx index a298545e..59edefa5 100644 --- a/src/components/player/internals/ProgressSaver.tsx +++ b/src/components/player/internals/ProgressSaver.tsx @@ -3,7 +3,7 @@ import { useInterval } from "react-use"; import { playerStatus } from "@/stores/player/slices/source"; import { usePlayerStore } from "@/stores/player/store"; -import { useProgressStore } from "@/stores/progress"; +import { ProgressItem, useProgressStore } from "@/stores/progress"; export function ProgressSaver() { const meta = usePlayerStore((s) => s.meta); @@ -12,6 +12,8 @@ export function ProgressSaver() { const status = usePlayerStore((s) => s.status); const hasPlayedOnce = usePlayerStore((s) => s.mediaPlaying.hasPlayedOnce); + const lastSavedRef = useRef(null); + const dataRef = useRef({ updateItem, meta, @@ -32,13 +34,24 @@ export function ProgressSaver() { if (!d.progress || !d.meta || !d.updateItem) return; if (d.status !== playerStatus.PLAYING) return; if (!hasPlayedOnce) return; - d.updateItem({ - meta: d.meta, - progress: { - duration: progress.duration, - watched: progress.time, - }, - }); + + let isDifferent = false; + if (!lastSavedRef.current) isDifferent = true; + else if ( + lastSavedRef.current?.duration !== progress.duration || + lastSavedRef.current?.watched !== progress.time + ) + isDifferent = true; + + lastSavedRef.current = { + duration: progress.duration, + watched: progress.time, + }; + if (isDifferent) + d.updateItem({ + meta: d.meta, + progress: lastSavedRef.current, + }); }, 3000); return null;