From ab5dcc7b4289dc27a236e41f1e618e0d0e067314 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Sat, 18 Nov 2023 23:14:06 +0100 Subject: [PATCH] Subtitle label conversion --- package.json | 1 + src/providers/captions.ts | 13 +++++++++++++ src/providers/embeds/upcloud.ts | 6 ++++-- src/providers/sources/superstream/subtitles.ts | 5 ++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 232a641..76238f5 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "cheerio": "^1.0.0-rc.12", "crypto-js": "^4.1.1", "form-data": "^4.0.0", + "iso-639-1": "^3.1.0", "nanoid": "^3.3.6", "node-fetch": "^2.7.0", "unpacker": "^1.0.1" diff --git a/src/providers/captions.ts b/src/providers/captions.ts index be3bf81..791bfa6 100644 --- a/src/providers/captions.ts +++ b/src/providers/captions.ts @@ -1,3 +1,5 @@ +import ISO6391 from 'iso-639-1'; + export const captionTypes = { srt: 'srt', vtt: 'vtt', @@ -17,3 +19,14 @@ export function getCaptionTypeFromUrl(url: string): CaptionType | null { if (!type) return null; return type; } + +export function labelToLanguageCode(label: string): string | null { + const code = ISO6391.getCode(label); + if (code.length === 0) return null; + return code; +} + +export function isValidLanguageCode(code: string | null): boolean { + if (!code) return false; + return ISO6391.validate(code); +} diff --git a/src/providers/embeds/upcloud.ts b/src/providers/embeds/upcloud.ts index 1ebe106..96cd14c 100644 --- a/src/providers/embeds/upcloud.ts +++ b/src/providers/embeds/upcloud.ts @@ -2,7 +2,7 @@ import crypto from 'crypto-js'; import { flags } from '@/main/targets'; import { makeEmbed } from '@/providers/base'; -import { Caption, getCaptionTypeFromUrl } from '@/providers/captions'; +import { Caption, getCaptionTypeFromUrl, labelToLanguageCode } from '@/providers/captions'; const { AES, enc } = crypto; @@ -102,8 +102,10 @@ export const upcloudScraper = makeEmbed({ if (track.kind !== 'captions') return; const type = getCaptionTypeFromUrl(track.file); if (!type) return; + const language = labelToLanguageCode(track.label); + if (!language) return; captions.push({ - language: track.label, // TODO Turn language name into ISO code + language, hasCorsRestrictions: false, type, url: track.file, diff --git a/src/providers/sources/superstream/subtitles.ts b/src/providers/sources/superstream/subtitles.ts index 20f8647..d49171d 100644 --- a/src/providers/sources/superstream/subtitles.ts +++ b/src/providers/sources/superstream/subtitles.ts @@ -1,4 +1,4 @@ -import { Caption, getCaptionTypeFromUrl } from '@/providers/captions'; +import { Caption, getCaptionTypeFromUrl, isValidLanguageCode } from '@/providers/captions'; import { sendRequest } from '@/providers/sources/superstream/sendRequest'; import { ScrapeContext } from '@/utils/context'; @@ -42,6 +42,9 @@ export async function getSubtitles( const subtitleType = getCaptionTypeFromUrl(subtitle.file_path); if (!subtitleType) return; + const validCode = isValidLanguageCode(subtitle.lang); + if (!validCode) return; + output.push({ language: subtitle.lang, hasCorsRestrictions: true,