Files
MoonTVPlus/src/lib/nfo-parser.ts

48 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-01-10 21:21:08 +08:00
/* eslint-disable @typescript-eslint/no-explicit-any */
import { parseString } from 'xml2js';
export interface NFOMetadata {
tmdbId?: number;
title?: string;
originalTitle?: string;
year?: number;
plot?: string;
rating?: number;
genres?: string[];
mediaType: 'movie' | 'tv';
}
/**
* NFO XML
*/
export async function parseNFO(xmlContent: string): Promise<NFOMetadata | null> {
return new Promise((resolve) => {
parseString(xmlContent, { explicitArray: false }, (err, result) => {
if (err || !result) {
resolve(null);
return;
}
const data = result.movie || result.tvshow;
if (!data) {
resolve(null);
return;
}
const metadata: NFOMetadata = {
tmdbId: data.tmdbid ? parseInt(data.tmdbid) : undefined,
title: data.title,
originalTitle: data.originaltitle,
year: data.year ? parseInt(data.year) : undefined,
plot: data.plot,
rating: data.rating ? parseFloat(data.rating) : undefined,
genres: Array.isArray(data.genre) ? data.genre : data.genre ? [data.genre] : [],
mediaType: result.movie ? 'movie' : 'tv',
};
resolve(metadata);
});
});
}