From 7ea4ac0c48dfaee99ddace4ac1537e943dc44541 Mon Sep 17 00:00:00 2001 From: Jip Fr Date: Tue, 2 Jan 2024 20:54:57 +0100 Subject: [PATCH] Fix LookMovie caption codes, create removeDuplicateLanguages util --- src/providers/captions.ts | 10 ++++++++++ src/providers/embeds/febbox/subtitles.ts | 15 +++++++++------ src/providers/sources/lookmovie/index.ts | 1 - src/providers/sources/lookmovie/video.ts | 24 ++++++++++++++++-------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/providers/captions.ts b/src/providers/captions.ts index ce3f398..92e5db3 100644 --- a/src/providers/captions.ts +++ b/src/providers/captions.ts @@ -31,3 +31,13 @@ export function isValidLanguageCode(code: string | null): boolean { if (!code) return false; return ISO6391.validate(code); } + +export function removeDuplicatedLanguages(list: Caption[]) { + const beenSeen: Record = {}; + + return list.filter((sub) => { + if (beenSeen[sub.language]) return false; + beenSeen[sub.language] = true; + return true; + }); +} diff --git a/src/providers/embeds/febbox/subtitles.ts b/src/providers/embeds/febbox/subtitles.ts index 70a94cb..fbb2e85 100644 --- a/src/providers/embeds/febbox/subtitles.ts +++ b/src/providers/embeds/febbox/subtitles.ts @@ -1,4 +1,9 @@ -import { Caption, getCaptionTypeFromUrl, isValidLanguageCode } from '@/providers/captions'; +import { + Caption, + getCaptionTypeFromUrl, + isValidLanguageCode, + removeDuplicatedLanguages as removeDuplicateLanguages, +} from '@/providers/captions'; import { captionsDomains } from '@/providers/sources/showbox/common'; import { sendRequest } from '@/providers/sources/showbox/sendRequest'; import { ScrapeContext } from '@/utils/context'; @@ -36,8 +41,7 @@ export async function getSubtitles( const subResult = (await sendRequest(ctx, subtitleApiQuery)) as CaptionApiResponse; const subtitleList = subResult.data.list; - const output: Caption[] = []; - const languagesAdded: Record = {}; + let output: Caption[] = []; subtitleList.forEach((sub) => { const subtitle = sub.subtitles.sort((a, b) => b.order - a.order)[0]; @@ -56,9 +60,6 @@ export async function getSubtitles( const validCode = isValidLanguageCode(subtitle.lang); if (!validCode) return; - if (languagesAdded[subtitle.lang]) return; - languagesAdded[subtitle.lang] = true; - output.push({ id: subtitleFilePath, language: subtitle.lang, @@ -68,5 +69,7 @@ export async function getSubtitles( }); }); + output = removeDuplicateLanguages(output); + return output; } diff --git a/src/providers/sources/lookmovie/index.ts b/src/providers/sources/lookmovie/index.ts index 73226dc..8611373 100644 --- a/src/providers/sources/lookmovie/index.ts +++ b/src/providers/sources/lookmovie/index.ts @@ -33,7 +33,6 @@ export const lookmovieScraper = makeSourcerer({ id: 'lookmovie', name: 'LookMovie', rank: 1, - disabled: true, flags: [flags.IP_LOCKED], scrapeShow: universalScraper, scrapeMovie: universalScraper, diff --git a/src/providers/sources/lookmovie/video.ts b/src/providers/sources/lookmovie/video.ts index 48bcafc..8e8e3c4 100644 --- a/src/providers/sources/lookmovie/video.ts +++ b/src/providers/sources/lookmovie/video.ts @@ -1,5 +1,5 @@ import { MovieMedia, ShowMedia } from '@/entrypoint/utils/media'; -import { Caption } from '@/providers/captions'; +import { Caption, labelToLanguageCode, removeDuplicatedLanguages } from '@/providers/captions'; import { ScrapeContext } from '@/utils/context'; import { StreamsDataResult } from './type'; @@ -44,13 +44,21 @@ export async function getVideo( } } - const captions: Caption[] = data.subtitles.map((sub) => ({ - id: sub.url, - type: 'vtt', - url: `${baseUrl}${sub.url}`, - hasCorsRestrictions: false, - language: sub.language, - })); + let captions: Caption[] = []; + + for (const sub of data.subtitles) { + const language = labelToLanguageCode(sub.language); + if (!language) continue; + captions.push({ + id: sub.url, + type: 'vtt', + url: `${baseUrl}${sub.url}`, + hasCorsRestrictions: false, + language, + }); + } + + captions = removeDuplicatedLanguages(captions); return { playlist: videoUrl,