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 { 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 { FULL_LANGUAGE_MAPPING } from '../utils/languages.js';
|
||||
import { LANGUAGES } from '../utils/constants.js';
|
||||
|
||||
function matchPattern(
|
||||
filename: string,
|
||||
@@ -22,6 +22,45 @@ function matchMultiplePatterns(
|
||||
.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 {
|
||||
static parse(filename: string): ParsedFile {
|
||||
const parsed = parseTorrentTitle(filename);
|
||||
@@ -51,10 +90,27 @@ class FileParser {
|
||||
);
|
||||
const visualTags = matchMultiplePatterns(filename, PARSE_REGEX.visualTags);
|
||||
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) =>
|
||||
number.toString().padStart(length, '0');
|
||||
const languages = [
|
||||
...new Set([
|
||||
...matchMultiplePatterns(filename, PARSE_REGEX.languages),
|
||||
...(parsed.languages || [])
|
||||
.map(mapParsedLanguageToKnown)
|
||||
.filter((lang): lang is string => !!lang),
|
||||
]),
|
||||
];
|
||||
|
||||
const releaseGroup =
|
||||
filename.match(PARSE_REGEX.releaseGroup)?.[1] ?? parsed.group;
|
||||
|
||||
@@ -13,6 +13,8 @@ const nextConfig: NextConfig = {
|
||||
fs: false,
|
||||
'./ptt.js': './ptt',
|
||||
'./regex.js': './regex',
|
||||
'../utils/languages.js': '../utils/languages',
|
||||
'../utils/constants.js': '../utils/constants',
|
||||
};
|
||||
return config;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user