feat: add extension attribute

refactor: simplify merging/fallback behaviour during stream parsing
This commit is contained in:
Viren070
2025-11-02 14:12:31 +00:00
parent 76ddf4a725
commit 551a46f071
4 changed files with 24 additions and 33 deletions
+1
View File
@@ -662,6 +662,7 @@ export const ParsedFileSchema = z.object({
upscaled: z.boolean().optional(),
network: z.string().optional(),
container: z.string().optional(),
extension: z.string().optional(),
});
export const ParsedStreamSchema = z.object({
+2
View File
@@ -82,6 +82,7 @@ export interface ParseValue {
upscaled: boolean | null;
network: string | null;
container: string | null;
extension: string | null;
indexer: string | null;
year: string | null;
title: string | null;
@@ -314,6 +315,7 @@ export abstract class BaseFormatter {
upscaled: stream.parsedFile?.upscaled || null,
network: stream.parsedFile?.network || null,
container: stream.parsedFile?.container || null,
extension: stream.parsedFile?.extension || null,
},
addon: {
name: stream.addon?.name || null,
+1
View File
@@ -80,6 +80,7 @@ class FileParser {
upscaled: parsed.upscaled ?? false,
network: parsed.network,
container: parsed.container,
extension: parsed.extension,
seasons: parsed.seasons,
episodes: parsed.episodes,
};
+20 -33
View File
@@ -426,12 +426,20 @@ class StreamParser {
const fileParsed = parsedStream.filename
? FileParser.parse(parsedStream.filename)
: undefined;
function arrayFallback<T>(
arr1: T[] | undefined,
arr2: T[] | undefined
): T[] | undefined {
return arr1?.length ? arr1 : arr2?.length ? arr2 : undefined;
}
function arrayMerge<T>(arr1: T[] | undefined, arr2: T[] | undefined): T[] {
return Array.from(new Set([...(arr1 ?? []), ...(arr2 ?? [])]));
}
return {
title: folderParsed?.title || fileParsed?.title,
year: fileParsed?.year || folderParsed?.year,
seasons: fileParsed?.seasons || folderParsed?.seasons,
episodes: fileParsed?.episodes || folderParsed?.episodes,
seasons: arrayFallback(fileParsed?.seasons, folderParsed?.seasons),
episodes: arrayFallback(fileParsed?.episodes, folderParsed?.episodes),
resolution: fileParsed?.resolution || folderParsed?.resolution,
quality: fileParsed?.quality || folderParsed?.quality,
encode: fileParsed?.encode || folderParsed?.encode,
@@ -444,37 +452,16 @@ class StreamParser {
upscaled: fileParsed?.upscaled || folderParsed?.upscaled,
network: fileParsed?.network || folderParsed?.network,
container: fileParsed?.container || folderParsed?.container,
// seasonEpisode:
// fileParsed?.seasonEpisode && fileParsed?.seasonEpisode.length > 0
// ? fileParsed?.seasonEpisode
// : folderParsed?.seasonEpisode &&
// folderParsed?.seasonEpisode.length > 0
// ? folderParsed?.seasonEpisode
// : undefined,
visualTags: Array.from(
new Set([
...(folderParsed?.visualTags ?? []),
...(fileParsed?.visualTags ?? []),
])
extension: fileParsed?.extension || folderParsed?.extension,
visualTags: arrayMerge(folderParsed?.visualTags, fileParsed?.visualTags),
audioTags: arrayMerge(folderParsed?.audioTags, fileParsed?.audioTags),
audioChannels: arrayMerge(
folderParsed?.audioChannels,
fileParsed?.audioChannels
),
audioTags: Array.from(
new Set([
...(folderParsed?.audioTags ?? []),
...(fileParsed?.audioTags ?? []),
])
),
audioChannels: Array.from(
new Set([
...(folderParsed?.audioChannels ?? []),
...(fileParsed?.audioChannels ?? []),
])
),
languages: Array.from(
new Set([
...(folderParsed?.languages ?? []),
...(fileParsed?.languages ?? []),
...this.getLanguages(stream, parsedStream),
])
languages: arrayMerge(
arrayMerge(folderParsed?.languages, fileParsed?.languages),
this.getLanguages(stream, parsedStream)
),
};
}