mirror of
https://github.com/movie-web/native-app.git
synced 2025-09-13 18:13:25 +00:00
feat: autoplay
This commit is contained in:
70
apps/expo/src/lib/meta.ts
Normal file
70
apps/expo/src/lib/meta.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import type { ScrapeMedia } from "@movie-web/provider-utils";
|
||||
import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb";
|
||||
|
||||
import type { PlayerMeta } from "~/stores/player/slices/video";
|
||||
|
||||
export const convertMetaToScrapeMedia = (meta: PlayerMeta): ScrapeMedia => {
|
||||
if (meta.type === "movie") {
|
||||
return {
|
||||
title: meta.title,
|
||||
releaseYear: meta.releaseYear,
|
||||
type: "movie",
|
||||
tmdbId: meta.tmdbId,
|
||||
imdbId: meta.imdbId,
|
||||
};
|
||||
}
|
||||
if (meta.type === "show") {
|
||||
return {
|
||||
title: meta.title,
|
||||
releaseYear: meta.releaseYear,
|
||||
type: "show",
|
||||
tmdbId: meta.tmdbId,
|
||||
season: meta.season!,
|
||||
episode: meta.episode!,
|
||||
imdbId: meta.imdbId,
|
||||
};
|
||||
}
|
||||
throw new Error("Invalid meta type");
|
||||
};
|
||||
|
||||
export const getNextEpisode = async (
|
||||
meta: PlayerMeta,
|
||||
): Promise<PlayerMeta | undefined> => {
|
||||
if (meta.type === "show") {
|
||||
const currentEpisode = meta.episode!;
|
||||
const nextEpisode = meta.episodes!.find(
|
||||
(episode) => episode.number === currentEpisode.number + 1,
|
||||
);
|
||||
if (!nextEpisode) {
|
||||
const media = await fetchMediaDetails(meta.tmdbId, "tv");
|
||||
if (!media) return;
|
||||
|
||||
const nextSeason = media.result.seasons.find(
|
||||
(season) => season.season_number === meta.season!.number + 1,
|
||||
);
|
||||
if (!nextSeason) return;
|
||||
const seasonDetails = await fetchSeasonDetails(
|
||||
meta.tmdbId,
|
||||
nextSeason.season_number,
|
||||
);
|
||||
if (!seasonDetails) return;
|
||||
return {
|
||||
...meta,
|
||||
season: {
|
||||
number: nextSeason.season_number,
|
||||
tmdbId: meta.season!.tmdbId,
|
||||
},
|
||||
episode: {
|
||||
number: seasonDetails.episodes[0]?.episode_number ?? 1,
|
||||
tmdbId: seasonDetails.episodes[0]?.id.toString() ?? "",
|
||||
title: seasonDetails.episodes[0]?.name,
|
||||
},
|
||||
};
|
||||
}
|
||||
return {
|
||||
...meta,
|
||||
episode: nextEpisode,
|
||||
};
|
||||
}
|
||||
throw new Error("Invalid meta type");
|
||||
};
|
Reference in New Issue
Block a user