mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-20 14:37:43 +01:00
some extra checks for the progress saver
This commit is contained in:
parent
1491a117b4
commit
e1edb1cc1f
1 changed files with 27 additions and 21 deletions
|
@ -1,6 +1,7 @@
|
||||||
import { useEffect, useRef } from "react";
|
import { useEffect, useRef } from "react";
|
||||||
import { useInterval } from "react-use";
|
import { useInterval } from "react-use";
|
||||||
|
|
||||||
|
import { playerStatus } from "@/stores/player/slices/source";
|
||||||
import { usePlayerStore } from "@/stores/player/store";
|
import { usePlayerStore } from "@/stores/player/store";
|
||||||
import { useProgressStore } from "@/stores/progress";
|
import { useProgressStore } from "@/stores/progress";
|
||||||
|
|
||||||
|
@ -8,31 +9,36 @@ export function ProgressSaver() {
|
||||||
const meta = usePlayerStore((s) => s.meta);
|
const meta = usePlayerStore((s) => s.meta);
|
||||||
const progress = usePlayerStore((s) => s.progress);
|
const progress = usePlayerStore((s) => s.progress);
|
||||||
const updateItem = useProgressStore((s) => s.updateItem);
|
const updateItem = useProgressStore((s) => s.updateItem);
|
||||||
|
const status = usePlayerStore((s) => s.status);
|
||||||
|
const hasPlayedOnce = usePlayerStore((s) => s.mediaPlaying.hasPlayedOnce);
|
||||||
|
|
||||||
const updateItemRef = useRef(updateItem);
|
const dataRef = useRef({
|
||||||
|
updateItem,
|
||||||
|
meta,
|
||||||
|
progress,
|
||||||
|
status,
|
||||||
|
hasPlayedOnce,
|
||||||
|
});
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
updateItemRef.current = updateItem;
|
dataRef.current.updateItem = updateItem;
|
||||||
}, [updateItem]);
|
dataRef.current.meta = meta;
|
||||||
|
dataRef.current.progress = progress;
|
||||||
const metaRef = useRef(meta);
|
dataRef.current.status = status;
|
||||||
useEffect(() => {
|
dataRef.current.hasPlayedOnce = hasPlayedOnce;
|
||||||
metaRef.current = meta;
|
}, [updateItem, progress, meta, status, hasPlayedOnce]);
|
||||||
}, [meta]);
|
|
||||||
|
|
||||||
const progressRef = useRef(progress);
|
|
||||||
useEffect(() => {
|
|
||||||
progressRef.current = progress;
|
|
||||||
}, [progress]);
|
|
||||||
|
|
||||||
useInterval(() => {
|
useInterval(() => {
|
||||||
if (updateItemRef.current && metaRef.current && progressRef.current)
|
const d = dataRef.current;
|
||||||
updateItemRef.current({
|
if (!d.progress || !d.meta || !d.updateItem) return;
|
||||||
meta: metaRef.current,
|
if (d.status !== playerStatus.PLAYING) return;
|
||||||
progress: {
|
if (!hasPlayedOnce) return;
|
||||||
duration: progress.duration,
|
d.updateItem({
|
||||||
watched: progress.time,
|
meta: d.meta,
|
||||||
},
|
progress: {
|
||||||
});
|
duration: progress.duration,
|
||||||
|
watched: progress.time,
|
||||||
|
},
|
||||||
|
});
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in a new issue