reduce code duplication

This commit is contained in:
castdrian 2023-06-29 21:21:24 +02:00
parent e5be04f5ae
commit 545ac8bb7b
2 changed files with 24 additions and 20 deletions

View File

@ -1,8 +1,8 @@
import { FetchError } from "ofetch";
import slugify from "slugify";
import { formatJWMeta, mediaTypeToJW } from "./justwatch";
import {
TMDBIdToUrlId,
TMDBMediaToMediaType,
formatTMDBMeta,
getEpisodes,
@ -187,17 +187,12 @@ export async function convertLegacyUrl(
// movies always have an imdb id on tmdb
if (imdbId && mediaType === MWMediaType.MOVIE) {
const movieId = await getMovieFromExternalId(imdbId);
if (movieId)
return `/media/tmdb-movie-${movieId}-${slugify(meta.meta.title, {
lower: true,
strict: true,
})}`;
}
if (movieId) {
return `/media/${TMDBIdToUrlId(mediaType, movieId, meta.meta.title)}`;
}
if (tmdbId) {
return `/media/tmdb-${type}-${tmdbId}-${slugify(meta.meta.title, {
lower: true,
strict: true,
})}`;
if (tmdbId) {
return `/media/${TMDBIdToUrlId(mediaType, tmdbId, meta.meta.title)}`;
}
}
}

View File

@ -79,15 +79,23 @@ export function formatTMDBMeta(
};
}
export function TMDBMediaToId(media: MWMediaMeta): string {
export function TMDBIdToUrlId(
type: MWMediaType,
tmdbId: string,
title: string
) {
return [
"tmdb",
mediaTypeToTMDB(media.type),
media.id,
slugify(media.title, { lower: true, strict: true }),
mediaTypeToTMDB(type),
tmdbId,
slugify(title, { lower: true, strict: true }),
].join("-");
}
export function TMDBMediaToId(media: MWMediaMeta): string {
return TMDBIdToUrlId(media.type, media.id, media.title);
}
export function decodeTMDBId(
paramId: string
): { id: string; type: MWMediaType } | null {
@ -178,10 +186,11 @@ export async function generateQuickSearchMediaUrl(
const type = result.media_type === "movie" ? "movie" : "show";
const title = result.media_type === "movie" ? result.title : result.name;
return `/media/tmdb-${type}-${result.id}-${slugify(title, {
lower: true,
strict: true,
})}`;
return `/media/${TMDBIdToUrlId(
TMDBMediaToMediaType(type),
result.id.toString(),
title
)}`;
}
// Conditional type which for inferring the return type based on the content type