fix: add custom handlers for 3 digit season numbers

This commit is contained in:
Viren070
2025-07-24 14:19:20 +01:00
parent 3065dfcedd
commit 31e1f34228
2 changed files with 57 additions and 2 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
import { PARSE_REGEX } from './regex';
import * as PTT from 'parse-torrent-title';
import { ParsedFile } from '../db';
import ptt from './ptt';
function matchPattern(
filename: string,
@@ -22,7 +22,7 @@ function matchMultiplePatterns(
class FileParser {
static parse(filename: string): ParsedFile {
const parsed = PTT.parse(filename);
const parsed = ptt.parse(filename);
// prevent the title from being parsed for info
if (parsed.title && parsed.title.length > 4) {
filename = filename.replace(parsed.title, '').trim();
+55
View File
@@ -0,0 +1,55 @@
import * as PTT from 'parse-torrent-title';
const array = (chain: (input: string) => number) => (input: string) => [
chain ? chain(input) : input,
];
const integer = (input: string) => parseInt(input, 10);
const parser = new PTT.Parser();
PTT.addDefaults(parser);
parser.addHandler(
'seasons',
/(?:s)(\d{3})[. ]?[xх-]?[. ]?(?:e|x|х|ep|-|\.)[. ]?\d{1,4}(?:[abc]|v0?[1-4]|\D|$)/i,
array(integer)
);
parser.addHandler(
'seasons',
/(?:so?|t)(\d{3})[. ]?[xх-]?[. ]?(?:e|x|х|ep|-|\.)[. ]?\d{1,4}(?:[abc]|v0?[1-4]|\D|$)/i,
array(integer)
);
parser.addHandler(
'seasons',
/(?:(?:\bthe\W)?\bcomplete\W)?(?:saison|seizoen|sezon(?:SO?)?|stagione|season|series|temp(?:orada)?):?[. ]?(\d{3})/i,
array(integer)
);
parser.addHandler(
'seasons',
/(?:(?:\bthe\W)?\bcomplete\W)?(?:\W|^)(\d{3})[. ]?(?:st|nd|rd|th)[. ]*season/i,
array(integer)
);
parser.addHandler(
'seasons',
/(\d{3})(?:-?й)?[. _]?(?:[Сс]езон|sez(?:on)?)(?:\W?\D|$)/i,
array(integer)
);
parser.addHandler(
'seasons',
/(?:\D|^)(\d{3})[Xxх]\d{1,3}(?:\D|$)/,
array(integer)
);
parser.addHandler('seasons', /[[(](\d{3})\.\d{1,3}[)\]]/, array(integer));
parser.addHandler('seasons', /-\s?(\d{3})\.\d{2,3}\s?-/, array(integer));
parser.addHandler('seasons', /^(\d{3})\.\d{2,3} - /, array(integer), {
skipIfBefore: ['year, source', 'resolution'],
});
parser.addHandler('seasons', /\bS(\d{3})E\d{1,2}\b/i, array(integer));
parser.addHandler('episodes', /\bS\d{3}E(\d{1,2})\b/i, array(integer));
parser.addHandler(
'episodes',
/(?:so?|t)\d{3}[. ]?[xх-]?[. ]?(?:e|x|х|ep)[. ]?(\d{1,4})(?:[abc]|v0?[1-4]|\D|$)/i,
array(integer)
);
export default parser;