From 70697cbf2f9bc7690ff0c83dfdd347a0974bae46 Mon Sep 17 00:00:00 2001 From: Viren070 Date: Wed, 2 Jul 2025 15:39:20 +0100 Subject: [PATCH] refactor: simplify stream skipping logic --- packages/core/src/db/schemas.ts | 2 +- packages/core/src/parser/streams.ts | 9 +-------- packages/core/src/presets/aiostreams.ts | 7 +++---- packages/core/src/wrapper.ts | 14 +++----------- 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/core/src/db/schemas.ts b/packages/core/src/db/schemas.ts index 07df660f..ba714c1c 100644 --- a/packages/core/src/db/schemas.ts +++ b/packages/core/src/db/schemas.ts @@ -757,7 +757,7 @@ export const AIOStream = StreamSchema.extend({ .optional(), duration: z.number().optional(), library: z.boolean().optional(), - id: z.string().min(1), + id: z.string().min(1).optional(), }), }); diff --git a/packages/core/src/parser/streams.ts b/packages/core/src/parser/streams.ts index 60c28f68..dceb0044 100644 --- a/packages/core/src/parser/streams.ts +++ b/packages/core/src/parser/streams.ts @@ -3,13 +3,6 @@ import { constants, createLogger, FULL_LANGUAGE_MAPPING } from '../utils'; import FileParser from './file'; const logger = createLogger('parser'); -export class SkipStreamError extends Error { - constructor(message: string) { - super(message); - this.name = 'SkipStreamError'; - } -} - class StreamParser { private count = 0; get errorRegexes(): { pattern: RegExp; message: string }[] | undefined { @@ -59,7 +52,7 @@ class StreamParser { constructor(protected readonly addon: Addon) {} - parse(stream: Stream): ParsedStream { + parse(stream: Stream): ParsedStream | { skip: true } { let parsedStream: ParsedStream = { id: this.getRandomId(), addon: this.addon, diff --git a/packages/core/src/presets/aiostreams.ts b/packages/core/src/presets/aiostreams.ts index f43a80f0..21b215f1 100644 --- a/packages/core/src/presets/aiostreams.ts +++ b/packages/core/src/presets/aiostreams.ts @@ -10,12 +10,11 @@ import { Preset, baseOptions } from './preset'; import { Env, formatZodError, RESOURCES } from '../utils'; import { StreamParser } from '../parser'; import { createLogger } from '../utils'; -import { SkipStreamError } from '../parser/streams'; const logger = createLogger('parser'); class AIOStreamsStreamParser extends StreamParser { - override parse(stream: Stream): ParsedStream { + override parse(stream: Stream): ParsedStream | { skip: true } { const aioStream = stream as AIOStream; const parsed = AIOStream.safeParse(aioStream); if (!parsed.success) { @@ -24,8 +23,8 @@ class AIOStreamsStreamParser extends StreamParser { ); throw new Error('Invalid stream'); } - if (aioStream.streamData.id.endsWith('external-download')) { - throw new SkipStreamError('External download stream'); + if (aioStream.streamData.id?.endsWith('external-download')) { + return { skip: true }; } const addonName = this.addon?.name?.trim(); return { diff --git a/packages/core/src/wrapper.ts b/packages/core/src/wrapper.ts index aa9944cd..f6a98140 100644 --- a/packages/core/src/wrapper.ts +++ b/packages/core/src/wrapper.ts @@ -39,7 +39,6 @@ import { import { PresetManager } from './presets'; import { StreamParser } from './parser'; import { z } from 'zod'; -import { SkipStreamError } from './parser/streams'; const logger = createLogger('wrappers'); // const cache = Cache.getInstance('wrappers'); @@ -168,16 +167,9 @@ export class Wrapper { ? PresetManager.fromId(this.addon.presetType).getParser() : StreamParser; const parser = new Parser(this.addon); - return streams.flatMap((stream: Stream) => { - try { - return [parser.parse(stream)]; - } catch (error: any) { - if (error instanceof SkipStreamError) { - return []; - } - throw error; - } - }); + return streams + .flatMap((stream: Stream) => parser.parse(stream)) + .filter((stream: any) => !stream.skip); } async getCatalog(