Feat: remember last active segment of audio/video (#681)

* remember last segment index for each audio/video

* fix for video

* auto scroll to cached segment
This commit is contained in:
an-lee
2024-06-17 16:28:51 +08:00
committed by GitHub
parent e00ac27670
commit 8175a775c3
5 changed files with 73 additions and 21 deletions

View File

@@ -91,6 +91,8 @@ type MediaPlayerContextType = {
createSegment: () => Promise<SegmentType | void>;
// remote config
ipaMappings: { [key: string]: string };
getCachedSegmentIndex: () => Promise<number>;
setCachedSegmentIndex: (index: number) => void;
};
export const MediaPlayerProviderContext =
@@ -191,6 +193,25 @@ export const MediaPlayerProvider = ({
segmentIndex: currentSegmentIndex,
});
const getCachedSegmentIndex = async () => {
if (!media) return;
const index = await EnjoyApp.cacheObjects.get(
`${media.mediaType.toLowerCase()}-${media.id}-last-segment-index`
);
return index || 0;
};
const setCachedSegmentIndex = (index: number) => {
if (!media) return;
return EnjoyApp.cacheObjects.set(
`${media.mediaType.toLowerCase()}-${media.id}-last-segment-index`,
index
);
};
const { notes, createNote } = useNotes({
targetId: segment?.id,
targetType: "Segment",
@@ -428,7 +449,6 @@ export const MediaPlayerProvider = ({
setCurrentTime(0);
const subscriptions = [
wavesurfer.on("loading", (percent: number) => console.log(`${percent}%`)),
wavesurfer.on("timeupdate", (time: number) => setCurrentTime(time)),
wavesurfer.on("decode", () => {
const peaks: Float32Array = wavesurfer
@@ -555,6 +575,14 @@ export const MediaPlayerProvider = ({
};
}, []);
/* cache last segment index */
useEffect(() => {
if (!media) return;
if (!currentSegmentIndex) return;
setCachedSegmentIndex(currentSegmentIndex);
}, [currentSegmentIndex]);
return (
<>
<MediaPlayerProviderContext.Provider
@@ -602,6 +630,8 @@ export const MediaPlayerProvider = ({
currentSegment: segment,
createSegment,
ipaMappings,
getCachedSegmentIndex,
setCachedSegmentIndex,
}}
>
{children}