1
0
Fork 0
mirror of https://github.com/sussy-code/smov.git synced 2024-12-26 15:37:41 +01:00
smov/src/components/player/hooks/usePlayer.ts

56 lines
1.7 KiB
TypeScript
Raw Normal View History

import { useInitializePlayer } from "@/components/player/hooks/useInitializePlayer";
import { PlayerMeta, playerStatus } from "@/stores/player/slices/source";
2023-07-23 16:30:22 +02:00
import { usePlayerStore } from "@/stores/player/store";
import { SourceSliceSource } from "@/stores/player/utils/qualities";
import { ProgressMediaItem, useProgressStore } from "@/stores/progress";
2023-07-23 16:30:22 +02:00
export interface Source {
url: string;
2023-10-17 19:11:53 +02:00
type: "hls" | "mp4";
2023-07-23 16:30:22 +02:00
}
function getProgress(
items: Record<string, ProgressMediaItem>,
meta: PlayerMeta | null
): number {
const item = items[meta?.tmdbId ?? ""];
if (!item || !meta) return 0;
if (meta.type === "movie") {
if (!item.progress) return 0;
return item.progress.watched;
}
const ep = item.episodes[meta.episode?.tmdbId ?? ""];
if (!ep) return 0;
return ep.progress.watched;
}
2023-07-23 16:30:22 +02:00
export function usePlayer() {
const setStatus = usePlayerStore((s) => s.setStatus);
const setMeta = usePlayerStore((s) => s.setMeta);
const setSource = usePlayerStore((s) => s.setSource);
2023-10-18 16:08:33 +02:00
const setSourceId = usePlayerStore((s) => s.setSourceId);
2023-09-30 20:57:00 +02:00
const status = usePlayerStore((s) => s.status);
const reset = usePlayerStore((s) => s.reset);
const meta = usePlayerStore((s) => s.meta);
const { init } = useInitializePlayer();
const progressStore = useProgressStore();
2023-07-23 16:30:22 +02:00
return {
reset,
2023-09-30 20:57:00 +02:00
status,
setMeta(m: PlayerMeta) {
setMeta(m);
},
2023-10-18 16:08:33 +02:00
playMedia(source: SourceSliceSource, sourceId: string | null) {
setSource(source, getProgress(progressStore.items, meta));
2023-10-18 16:08:33 +02:00
setSourceId(sourceId);
2023-07-23 16:30:22 +02:00
setStatus(playerStatus.PLAYING);
init();
2023-07-23 16:30:22 +02:00
},
setScrapeStatus() {
setStatus(playerStatus.SCRAPING);
},
2023-07-23 16:30:22 +02:00
};
}