Parse Plex-style Title (Year) and Show/Season folders; restore notWebReady with direct node stream URLs; hide unavailable titles by default. Co-authored-by: Cursor <cursoragent@cursor.com>
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import {
|
|
detectMediaType,
|
|
parseMovieFilename,
|
|
parseMovieFromPath,
|
|
parseSeriesFilename,
|
|
parseSeriesFromPath,
|
|
} from "./filename-parser";
|
|
|
|
function assert(condition: unknown, message: string): asserts condition {
|
|
if (!condition) throw new Error(message);
|
|
}
|
|
|
|
function run() {
|
|
const movie = parseMovieFilename(
|
|
"The.Matrix.1999.2160p.UHD.BluRay.REMUX.HEVC.TrueHD.Atmos.mkv"
|
|
);
|
|
assert(movie, "movie parse failed");
|
|
assert(movie.title === "The Matrix", `title=${movie.title}`);
|
|
assert(movie.year === 1999, `year=${movie.year}`);
|
|
assert(movie.resolution === "2160p", `resolution=${movie.resolution}`);
|
|
|
|
const series = parseSeriesFilename("Breaking.Bad.S03E04.1080p.BluRay.mkv");
|
|
assert(series, "series parse failed");
|
|
assert(series.title === "Breaking Bad", `title=${series.title}`);
|
|
assert(series.season === 3, `season=${series.season}`);
|
|
assert(series.episode === 4, `episode=${series.episode}`);
|
|
|
|
const alt = parseSeriesFilename("Show.Name.1x02.720p.mkv");
|
|
assert(alt?.season === 1 && alt.episode === 2, "1x02 pattern failed");
|
|
|
|
assert(detectMediaType("Movie.2020.mkv") === "movie", "detect movie");
|
|
assert(detectMediaType("Show.S01E01.mkv") === "episode", "detect episode");
|
|
assert(detectMediaType("readme.txt") === null, "detect non-video");
|
|
|
|
const folderMovie = parseMovieFromPath("/media/movies/Inception (2010)/Inception.mkv");
|
|
assert(folderMovie?.title === "Inception" && folderMovie.year === 2010, "folder movie");
|
|
|
|
const folderSeries = parseSeriesFromPath(
|
|
"/media/series/Breaking Bad/Season 01/Breaking.Bad.S01E01.mkv"
|
|
);
|
|
assert(
|
|
folderSeries?.title === "Breaking Bad" &&
|
|
folderSeries.season === 1 &&
|
|
folderSeries.episode === 1,
|
|
"folder series"
|
|
);
|
|
|
|
console.log("filename-parser tests passed");
|
|
}
|
|
|
|
run();
|