Front: better Format of Video Metadata for Episodes

This commit is contained in:
Arthur Jamet 2024-08-04 19:46:16 +02:00 committed by Zoe Roux
parent 7bc07baf47
commit ddc3e8f61a
3 changed files with 20 additions and 14 deletions

View File

@ -65,6 +65,17 @@ const mapData = (
}; };
}; };
const formatTitleMetadata = (item: Item) => {
if (item.type === "movie") {
return item.name;
}
return `${item.name} (${episodeDisplayNumber({
seasonNumber: item.seasonNumber,
episodeNumber: item.episodeNumber,
absoluteNumber: item.absoluteNumber,
})})`;
};
export const Player = ({ export const Player = ({
slug, slug,
type, type,
@ -81,10 +92,7 @@ export const Player = ({
const [playbackError, setPlaybackError] = useState<string | undefined>(undefined); const [playbackError, setPlaybackError] = useState<string | undefined>(undefined);
const { data, error } = useFetch(Player.query(type, slug)); const { data, error } = useFetch(Player.query(type, slug));
const { data: info, error: infoError } = useFetch(Player.infoQuery(type, slug)); const { data: info, error: infoError } = useFetch(Player.infoQuery(type, slug));
const image = const image = data && data.type === "episode" ? data.show?.poster ?? data?.poster : data?.poster;
data && data.type === "episode"
? data.show?.poster ?? data?.thumbnail
: data?.thumbnail;
const previous = const previous =
data && data.type === "episode" && data.previousEpisode data && data.type === "episode" && data.previousEpisode
? `/watch/${data.previousEpisode.slug}?t=0` ? `/watch/${data.previousEpisode.slug}?t=0`
@ -93,15 +101,8 @@ export const Player = ({
data && data.type === "episode" && data.nextEpisode data && data.type === "episode" && data.nextEpisode
? `/watch/${data.nextEpisode.slug}?t=0` ? `/watch/${data.nextEpisode.slug}?t=0`
: undefined; : undefined;
const title = const title = data && formatTitleMetadata(data);
data && const subtitle = data && data.type === "episode" ? data.show?.name : undefined;
(data.type === "movie"
? data.name
: `${data.show!.name} ${episodeDisplayNumber({
seasonNumber: data.seasonNumber,
episodeNumber: data.episodeNumber,
absoluteNumber: data.absoluteNumber,
})}`);
useVideoKeyboard(info?.subtitles, info?.fonts, previous, next); useVideoKeyboard(info?.subtitles, info?.fonts, previous, next);
@ -145,6 +146,7 @@ export const Player = ({
<Video <Video
metadata={{ metadata={{
title: title ?? t("show.episodeNoMetadata"), title: title ?? t("show.episodeNoMetadata"),
subtitle: subtitle ?? undefined,
description: data?.overview ?? undefined, description: data?.overview ?? undefined,
imageUri: image?.medium, imageUri: image?.medium,
next: next, next: next,

View File

@ -26,11 +26,13 @@ import { durationAtom, playAtom, progressAtom } from "./state";
export const MediaSessionManager = ({ export const MediaSessionManager = ({
title, title,
subtitle,
imageUri, imageUri,
previous, previous,
next, next,
}: { }: {
title?: string; title?: string;
subtitle?: string;
imageUri?: string | null; imageUri?: string | null;
previous?: string; previous?: string;
next?: string; next?: string;
@ -45,9 +47,10 @@ export const MediaSessionManager = ({
if (!("mediaSession" in navigator)) return; if (!("mediaSession" in navigator)) return;
navigator.mediaSession.metadata = new MediaMetadata({ navigator.mediaSession.metadata = new MediaMetadata({
title: title, title: title,
album: subtitle,
artwork: imageUri ? [{ src: imageUri }] : undefined, artwork: imageUri ? [{ src: imageUri }] : undefined,
}); });
}, [title, imageUri]); }, [title, subtitle, imageUri]);
useEffect(() => { useEffect(() => {
if (!("mediaSession" in navigator)) return; if (!("mediaSession" in navigator)) return;

View File

@ -116,6 +116,7 @@ export const Video = memo(function Video({
startTime?: number | null; startTime?: number | null;
metadata: { metadata: {
title?: string; title?: string;
subtitle?: string;
description?: string; description?: string;
imageUri?: string; imageUri?: string;
previous?: string; previous?: string;