mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
feat(parser): use parsed languages from parse-torrent-title
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
import { PARSE_REGEX } from './regex.js';
|
import { PARSE_REGEX } from './regex.js';
|
||||||
import { ParsedFile } from '../db/schemas.js';
|
import { ParsedFile } from '../db/schemas.js';
|
||||||
// import ptt from './ptt.js';
|
|
||||||
// import { parseTorrentTitle } from './parse-torrent-title/index.js';
|
|
||||||
import { parseTorrentTitle } from '@viren070/parse-torrent-title';
|
import { parseTorrentTitle } from '@viren070/parse-torrent-title';
|
||||||
|
import { FULL_LANGUAGE_MAPPING } from '../utils/languages.js';
|
||||||
|
import { LANGUAGES } from '../utils/constants.js';
|
||||||
|
|
||||||
function matchPattern(
|
function matchPattern(
|
||||||
filename: string,
|
filename: string,
|
||||||
@@ -22,6 +22,45 @@ function matchMultiplePatterns(
|
|||||||
.map(([tag]) => tag);
|
.map(([tag]) => tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mapLanguageCode(code: string): string {
|
||||||
|
switch (code.toLowerCase()) {
|
||||||
|
case 'zh-tw':
|
||||||
|
return 'zh';
|
||||||
|
case 'es-419':
|
||||||
|
return 'es-MX';
|
||||||
|
default:
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertLangCodeToName(code: string): string | undefined {
|
||||||
|
const parts = code.split('-');
|
||||||
|
const possibleLangs = FULL_LANGUAGE_MAPPING.filter((language) => {
|
||||||
|
if (parts.length === 2) {
|
||||||
|
return (
|
||||||
|
language.iso_639_1?.toLowerCase() === parts[0].toLowerCase() &&
|
||||||
|
language.iso_3166_1?.toLowerCase() === parts[1].toLowerCase()
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return language.iso_639_1?.toLowerCase() === parts[0].toLowerCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let chosenLang =
|
||||||
|
possibleLangs.find((lang) => lang.flag_priority) || possibleLangs[0];
|
||||||
|
if (chosenLang) {
|
||||||
|
const candidateLang = (
|
||||||
|
chosenLang.internal_english_name || chosenLang.english_name
|
||||||
|
)
|
||||||
|
.split(/;|\(/)[0]
|
||||||
|
.trim();
|
||||||
|
if (LANGUAGES.includes(candidateLang as any)) {
|
||||||
|
return candidateLang;
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class FileParser {
|
class FileParser {
|
||||||
static parse(filename: string): ParsedFile {
|
static parse(filename: string): ParsedFile {
|
||||||
const parsed = parseTorrentTitle(filename);
|
const parsed = parseTorrentTitle(filename);
|
||||||
@@ -51,10 +90,27 @@ class FileParser {
|
|||||||
);
|
);
|
||||||
const visualTags = matchMultiplePatterns(filename, PARSE_REGEX.visualTags);
|
const visualTags = matchMultiplePatterns(filename, PARSE_REGEX.visualTags);
|
||||||
const audioTags = matchMultiplePatterns(filename, PARSE_REGEX.audioTags);
|
const audioTags = matchMultiplePatterns(filename, PARSE_REGEX.audioTags);
|
||||||
const languages = matchMultiplePatterns(filename, PARSE_REGEX.languages);
|
const mapParsedLanguageToKnown = (lang: string): string | undefined => {
|
||||||
|
switch (lang.toLowerCase()) {
|
||||||
|
case 'multi audio':
|
||||||
|
return 'Multi';
|
||||||
|
case 'dual audio':
|
||||||
|
return 'Dual Audio';
|
||||||
|
case 'multi subs':
|
||||||
|
return undefined;
|
||||||
|
default:
|
||||||
|
return convertLangCodeToName(mapLanguageCode(lang));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const getPaddedNumber = (number: number, length: number) =>
|
const languages = [
|
||||||
number.toString().padStart(length, '0');
|
...new Set([
|
||||||
|
...matchMultiplePatterns(filename, PARSE_REGEX.languages),
|
||||||
|
...(parsed.languages || [])
|
||||||
|
.map(mapParsedLanguageToKnown)
|
||||||
|
.filter((lang): lang is string => !!lang),
|
||||||
|
]),
|
||||||
|
];
|
||||||
|
|
||||||
const releaseGroup =
|
const releaseGroup =
|
||||||
filename.match(PARSE_REGEX.releaseGroup)?.[1] ?? parsed.group;
|
filename.match(PARSE_REGEX.releaseGroup)?.[1] ?? parsed.group;
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ const nextConfig: NextConfig = {
|
|||||||
fs: false,
|
fs: false,
|
||||||
'./ptt.js': './ptt',
|
'./ptt.js': './ptt',
|
||||||
'./regex.js': './regex',
|
'./regex.js': './regex',
|
||||||
|
'../utils/languages.js': '../utils/languages',
|
||||||
|
'../utils/constants.js': '../utils/constants',
|
||||||
};
|
};
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user