diff --git a/src/runners/individualRunner.ts b/src/runners/individualRunner.ts index 7506b67..005caaf 100644 --- a/src/runners/individualRunner.ts +++ b/src/runners/individualRunner.ts @@ -107,14 +107,21 @@ export async function scrapeInvidualSource( // Fall back to OpenSubtitles if no Wyzie subs found if (!playableStream.captions.some((caption) => caption.wyziesubs)) { + const [imdbId, season, episode] = atob(ops.media.imdbId) + .split('.') + .map((x, i) => (i === 0 ? x : Number(x) || null)); + const mediaInfo = { + ...ops, + media: { + type: season && episode ? 'show' : 'movie', + imdbId: imdbId?.toString() || '', + ...(season && episode ? { season: { number: season }, episode: { number: episode } } : {}), + } as ScrapeMedia, + }; playableStream.captions = await addOpenSubtitlesCaptions( playableStream.captions, - ops, - btoa( - `${ops.media.imdbId}${ - ops.media.type === 'show' ? `.${ops.media.season.number}.${ops.media.episode.number}` : '' - }`, - ), + mediaInfo, + ops.media.imdbId, ); } } @@ -172,9 +179,21 @@ export async function scrapeIndividualEmbed( const playableStreams = await validatePlayableStreams(output.stream, ops, embedScraper.id); if (playableStreams.length === 0) throw new NotFoundError('No playable streams found'); - if (media && !ops.disableOpensubtitles) + if (media && !ops.disableOpensubtitles) { + const [imdbId, season, episode] = atob(media) + .split('.') + .map((x, i) => (i === 0 ? x : Number(x) || null)); + const mediaInfo = { + ...ops, + media: { + type: season && episode ? 'show' : 'movie', + imdbId: imdbId?.toString() || '', + ...(season && episode ? { season: { number: season }, episode: { number: episode } } : {}), + } as ScrapeMedia, + }; for (const playableStream of playableStreams) - playableStream.captions = await addOpenSubtitlesCaptions(playableStream.captions, ops, media); + playableStream.captions = await addOpenSubtitlesCaptions(playableStream.captions, mediaInfo, media); + } output.stream = playableStreams; diff --git a/src/runners/runner.ts b/src/runners/runner.ts index 064d064..5f43894 100644 --- a/src/runners/runner.ts +++ b/src/runners/runner.ts @@ -11,7 +11,6 @@ import { reorderOnIdList } from '@/utils/list'; import { addOpenSubtitlesCaptions } from '@/utils/opensubtitles'; import { requiresProxy, setupProxy } from '@/utils/proxy'; import { isValidStream, validatePlayableStream } from '@/utils/valid'; -import { addWyzieCaptions } from '@/utils/wyziesubs'; export type RunOutput = { sourceId: string; @@ -119,27 +118,15 @@ export async function runAllProviders(list: ProviderList, ops: ProviderRunnerOpt // opensubtitles if (!ops.disableOpensubtitles) { if (ops.media.imdbId) { - // Try Wyzie subs first - playableStream.captions = await addWyzieCaptions( + playableStream.captions = await addOpenSubtitlesCaptions( playableStream.captions, - ops.media.tmdbId, - ops.media.imdbId, - ops.media.type === 'show' ? ops.media.season.number : undefined, - ops.media.type === 'show' ? ops.media.episode.number : undefined, + ops, + btoa( + `${ops.media.imdbId}${ + ops.media.type === 'show' ? `.${ops.media.season.number}.${ops.media.episode.number}` : '' + }`, + ), ); - - // Fall back to OpenSubtitles if no Wyzie subs found - if (!playableStream.captions.some((caption) => caption.wyziesubs)) { - playableStream.captions = await addOpenSubtitlesCaptions( - playableStream.captions, - ops, - btoa( - `${ops.media.imdbId}${ - ops.media.type === 'show' ? `.${ops.media.season.number}.${ops.media.episode.number}` : '' - }`, - ), - ); - } } } @@ -197,27 +184,15 @@ export async function runAllProviders(list: ProviderList, ops: ProviderRunnerOpt // opensubtitles if (!ops.disableOpensubtitles) { if (ops.media.imdbId) { - // Try Wyzie subs first - playableStream.captions = await addWyzieCaptions( + playableStream.captions = await addOpenSubtitlesCaptions( playableStream.captions, - ops.media.tmdbId, - ops.media.imdbId, - ops.media.type === 'show' ? ops.media.season.number : undefined, - ops.media.type === 'show' ? ops.media.episode.number : undefined, + ops, + btoa( + `${ops.media.imdbId}${ + ops.media.type === 'show' ? `.${ops.media.season.number}.${ops.media.episode.number}` : '' + }`, + ), ); - - // Fall back to OpenSubtitles if no Wyzie subs found - if (!playableStream.captions.some((caption) => caption.wyziesubs)) { - playableStream.captions = await addOpenSubtitlesCaptions( - playableStream.captions, - ops, - btoa( - `${ops.media.imdbId}${ - ops.media.type === 'show' ? `.${ops.media.season.number}.${ops.media.episode.number}` : '' - }`, - ), - ); - } } } embedOutput.stream = [playableStream]; diff --git a/src/utils/opensubtitles.ts b/src/utils/opensubtitles.ts index 559536c..7bedcfd 100644 --- a/src/utils/opensubtitles.ts +++ b/src/utils/opensubtitles.ts @@ -1,10 +1,17 @@ +import { ScrapeMedia } from '@/entrypoint/utils/media'; import { Caption, labelToLanguageCode, removeDuplicatedLanguages } from '@/providers/captions'; import { IndividualEmbedRunnerOptions } from '@/runners/individualRunner'; import { ProviderRunnerOptions } from '@/runners/runner'; +import { addWyzieCaptions } from './wyziesubs'; + +type CaptionOptions = (ProviderRunnerOptions | IndividualEmbedRunnerOptions) & { + media?: ScrapeMedia; +}; + export async function addOpenSubtitlesCaptions( captions: Caption[], - ops: ProviderRunnerOptions | IndividualEmbedRunnerOptions, + ops: CaptionOptions, media: string, ): Promise