2 changed files with 90 additions and 0 deletions
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
import { useEffect } from "react"; |
||||
|
||||
import { usePlayerStore } from "@/stores/player/store"; |
||||
|
||||
export type WindowMeta = { |
||||
meta: { |
||||
type: "show" | "movie"; |
||||
tmdbId: string; |
||||
title: string; |
||||
year: number; |
||||
poster?: string; |
||||
}; |
||||
episode?: { |
||||
number: number; |
||||
tmdbId: string; |
||||
title: string; |
||||
}; |
||||
season?: { |
||||
number: number; |
||||
tmdbId: string; |
||||
title: string; |
||||
}; |
||||
progress: { |
||||
time: number; |
||||
duration: number; |
||||
}; |
||||
controls: { |
||||
isPlaying: boolean; |
||||
isLoading: boolean; |
||||
}; |
||||
}; |
||||
|
||||
declare global { |
||||
interface Window { |
||||
meta?: { |
||||
player?: WindowMeta; |
||||
}; |
||||
} |
||||
} |
||||
|
||||
export function MetaReporter() { |
||||
const meta = usePlayerStore((s) => s.meta); |
||||
const progress = usePlayerStore((s) => s.progress); |
||||
const mediaPlaying = usePlayerStore((s) => s.mediaPlaying); |
||||
|
||||
useEffect(() => { |
||||
if (!window.meta) window.meta = {}; |
||||
if (meta) { |
||||
window.meta.player = { |
||||
meta: { |
||||
title: meta.title, |
||||
type: meta.type, |
||||
tmdbId: meta.tmdbId, |
||||
year: meta.releaseYear, |
||||
poster: meta.poster, |
||||
}, |
||||
controls: { |
||||
isPlaying: mediaPlaying.isPlaying, |
||||
isLoading: mediaPlaying.isLoading, |
||||
}, |
||||
season: meta.season |
||||
? { |
||||
number: meta.season.number, |
||||
tmdbId: meta.season.tmdbId, |
||||
title: meta.season.title, |
||||
} |
||||
: undefined, |
||||
episode: meta.episode |
||||
? { |
||||
number: meta.episode.number, |
||||
tmdbId: meta.episode.tmdbId, |
||||
title: meta.episode.title, |
||||
} |
||||
: undefined, |
||||
progress: { |
||||
time: progress.time, |
||||
duration: progress.duration, |
||||
}, |
||||
}; |
||||
} |
||||
|
||||
return () => { |
||||
if (window.meta) delete window.meta.player; |
||||
}; |
||||
}, [meta, progress, mediaPlaying]); |
||||
|
||||
return null; |
||||
} |
Loading…
Reference in new issue