Fix LookMovie caption codes, create removeDuplicateLanguages util

This commit is contained in:
Jip Fr
2024-01-02 20:54:57 +01:00
parent 7dfeeb2700
commit 7ea4ac0c48
4 changed files with 35 additions and 15 deletions

View File

@@ -31,3 +31,13 @@ export function isValidLanguageCode(code: string | null): boolean {
if (!code) return false; if (!code) return false;
return ISO6391.validate(code); return ISO6391.validate(code);
} }
export function removeDuplicatedLanguages(list: Caption[]) {
const beenSeen: Record<string, true> = {};
return list.filter((sub) => {
if (beenSeen[sub.language]) return false;
beenSeen[sub.language] = true;
return true;
});
}

View File

@@ -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 { captionsDomains } from '@/providers/sources/showbox/common';
import { sendRequest } from '@/providers/sources/showbox/sendRequest'; import { sendRequest } from '@/providers/sources/showbox/sendRequest';
import { ScrapeContext } from '@/utils/context'; import { ScrapeContext } from '@/utils/context';
@@ -36,8 +41,7 @@ export async function getSubtitles(
const subResult = (await sendRequest(ctx, subtitleApiQuery)) as CaptionApiResponse; const subResult = (await sendRequest(ctx, subtitleApiQuery)) as CaptionApiResponse;
const subtitleList = subResult.data.list; const subtitleList = subResult.data.list;
const output: Caption[] = []; let output: Caption[] = [];
const languagesAdded: Record<string, true> = {};
subtitleList.forEach((sub) => { subtitleList.forEach((sub) => {
const subtitle = sub.subtitles.sort((a, b) => b.order - a.order)[0]; 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); const validCode = isValidLanguageCode(subtitle.lang);
if (!validCode) return; if (!validCode) return;
if (languagesAdded[subtitle.lang]) return;
languagesAdded[subtitle.lang] = true;
output.push({ output.push({
id: subtitleFilePath, id: subtitleFilePath,
language: subtitle.lang, language: subtitle.lang,
@@ -68,5 +69,7 @@ export async function getSubtitles(
}); });
}); });
output = removeDuplicateLanguages(output);
return output; return output;
} }

View File

@@ -33,7 +33,6 @@ export const lookmovieScraper = makeSourcerer({
id: 'lookmovie', id: 'lookmovie',
name: 'LookMovie', name: 'LookMovie',
rank: 1, rank: 1,
disabled: true,
flags: [flags.IP_LOCKED], flags: [flags.IP_LOCKED],
scrapeShow: universalScraper, scrapeShow: universalScraper,
scrapeMovie: universalScraper, scrapeMovie: universalScraper,

View File

@@ -1,5 +1,5 @@
import { MovieMedia, ShowMedia } from '@/entrypoint/utils/media'; 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 { ScrapeContext } from '@/utils/context';
import { StreamsDataResult } from './type'; import { StreamsDataResult } from './type';
@@ -44,13 +44,21 @@ export async function getVideo(
} }
} }
const captions: Caption[] = data.subtitles.map((sub) => ({ let captions: Caption[] = [];
for (const sub of data.subtitles) {
const language = labelToLanguageCode(sub.language);
if (!language) continue;
captions.push({
id: sub.url, id: sub.url,
type: 'vtt', type: 'vtt',
url: `${baseUrl}${sub.url}`, url: `${baseUrl}${sub.url}`,
hasCorsRestrictions: false, hasCorsRestrictions: false,
language: sub.language, language,
})); });
}
captions = removeDuplicatedLanguages(captions);
return { return {
playlist: videoUrl, playlist: videoUrl,