@ctrl/video-filename-parser
Version:
A radarr style release name parser
34 lines (33 loc) • 1.27 kB
JavaScript
import { getFirstTitleBoundaryPosition } from './boundaries.js';
import { releaseTitleCleaner, simplifyTitle } from './cleanup.js';
import { movieTitleYearPatterns, releaseGroupSuffixExp } from './patterns.js';
export function parseTitleAndYear(title) {
const simpleTitle = simplifyTitle(title);
// Removing the group from the end could be trouble if a title is "title-year"
const grouplessTitle = simpleTitle.replace(releaseGroupSuffixExp, '');
for (const pattern of movieTitleYearPatterns) {
const result = parseTitleYearPattern(pattern, grouplessTitle);
if (result !== null) {
return result;
}
}
const firstPosition = getFirstTitleBoundaryPosition(title);
if (firstPosition !== null) {
return { title: releaseTitleCleaner(title.slice(0, firstPosition)) ?? '', year: null };
}
return { title: title.trim(), year: null };
}
function parseTitleYearPattern(pattern, title) {
const match = pattern.regex.exec(title);
if (!match?.groups) {
return null;
}
const cleanTitle = releaseTitleCleaner(match.groups.title ?? '');
if (cleanTitle === null) {
return null;
}
return {
title: cleanTitle,
year: match.groups.year ?? null,
};
}