diff --git a/packages/core/src/db/schemas.ts b/packages/core/src/db/schemas.ts index 357e1fd6..6d68bf5d 100644 --- a/packages/core/src/db/schemas.ts +++ b/packages/core/src/db/schemas.ts @@ -644,12 +644,22 @@ export const AddonCatalogResponseSchema = z.object({ export type AddonCatalogResponse = z.infer; export type AddonCatalog = z.infer; -export const ExtrasTypesSchema = z.enum(['skip', 'genre', 'search']); +export const ExtrasTypesSchema = z.enum([ + 'skip', + 'genre', + 'search', + 'filename', + 'videoHash', + 'videoSize', +]); export type ExtrasTypes = z.infer; export const ExtrasSchema = z.object({ skip: z.coerce.number().optional(), genre: z.string().optional(), search: z.string().optional(), + filename: z.string().optional(), + videoHash: z.string().optional(), + videoSize: z.coerce.number().optional(), }); export type Extras = z.infer; diff --git a/packages/core/src/main.ts b/packages/core/src/main.ts index 72b1dc39..0febe058 100644 --- a/packages/core/src/main.ts +++ b/packages/core/src/main.ts @@ -13,7 +13,7 @@ import { getTimeTakenSincePoint, maskSensitiveInfo, Cache, - CatalogExtras, + ExtrasParser, TMDBMetadata, Metadata, makeUrlLogSafe, @@ -318,7 +318,7 @@ export class AIOStreams { // reset the type from the request (which is the overriden type) to the actual type type = modification.type; } - const parsedExtras = new CatalogExtras(extras); + const parsedExtras = new ExtrasParser(extras); logger.debug(`Parsed extras: ${JSON.stringify(parsedExtras)}`); if (parsedExtras.genre === 'None') { logger.debug(`Genre extra is None, removing genre extra`); @@ -592,6 +592,8 @@ export class AIOStreams { } } } + const parsedExtras = new ExtrasParser(extras); + logger.debug(`Parsed extras: ${JSON.stringify(parsedExtras)}`); // Request subtitles from all supported addons in parallel let errors: AIOStreamsError[] = this.addonInitialisationErrors.map( @@ -608,7 +610,7 @@ export class AIOStreams { const subtitles = await new Wrapper(addon).getSubtitles( type, id, - extras + parsedExtras.toString() ); if (subtitles) { allSubtitles.push(...subtitles); diff --git a/packages/core/src/utils/catalogExtras.ts b/packages/core/src/utils/extras.ts similarity index 94% rename from packages/core/src/utils/catalogExtras.ts rename to packages/core/src/utils/extras.ts index 2182ef87..c12b31fe 100644 --- a/packages/core/src/utils/catalogExtras.ts +++ b/packages/core/src/utils/extras.ts @@ -1,6 +1,6 @@ import { Extras, ExtrasSchema, ExtrasTypesSchema } from '../db/schemas'; -export class CatalogExtras { +export class ExtrasParser { private extras: Partial; constructor(extras?: string) { @@ -13,7 +13,7 @@ export class CatalogExtras { } const mapped = extras.split('&').map((e) => { const [key, value] = e.split('='); - return { key, value }; + return { key, value: encodeURIComponent(value) }; }); const extrasObject = Object.fromEntries( mapped.map(({ key, value }) => { diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index 6a0d89d2..c4bf4135 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -12,5 +12,5 @@ export * from './config'; export * from './languages'; export * from './dsu'; export * from './startup'; -export * from './catalogExtras'; +export * from './extras'; export * from './rpdb';