Skip to content

Commit

Permalink
updated
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyhalight committed Aug 25, 2024
1 parent 709388d commit 125a2d8
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 26 deletions.
2 changes: 2 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
- Добавлена поддержка 9animetv (#748)
- Добавлена поддержка EpicGames Developers (#255, #505)
- Добавлена поддержка Odysee (#755)
- Добавлена возможность использования автоматически переведенных субтитров с YouTube. Язык, на который переводятся субтитры, выбирается согласно языку интерфейса расширения. Если язык интерфейса и язык автосгенерированных субтитров совпадают, то субтитры не будут показаны
- Автосгенериванные субтитры с YouTube, теперь, используют уже существующие токены, а не генерируют новые
- Изменен загрузчик стилей при сборке расширения, благодаря этому скорость сборки стала немного быстрее, а итоговый размер кода, отвечающего за стили, уменьшен в ~1.65 раза
- Исправлена работа расширения без наличия WebAudio (#749)
- Исправлена ошибка из-за которой кнопка перевода могла не появляться до первичного получения субтитров или завершения автоперевода
- Исправлена ошибка из-за которой при смене адреса worker прокси-сервера домен сразу применялся, даже, если проксирование аудио выключено
- Исправлена ошибка из-за которой при запросе субтитров не учитывался выбранный язык видео
- Автоперевод и первичное получение субтитров, теперь, происходит параллельно
- Некоторые другие мелкие улучшения

Expand Down
10 changes: 5 additions & 5 deletions dist/vot-min.user.js

Large diffs are not rendered by default.

85 changes: 64 additions & 21 deletions dist/vot.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -5120,6 +5120,7 @@ const detectServices = Object.keys(detectUrls).map((k) =>




// Get the language code from the response or the text
async function getLanguage(player, response, title, description) {
if (
Expand Down Expand Up @@ -5301,25 +5302,59 @@ function isMusic() {

function getSubtitles() {
const response = getPlayerResponse();
let captionTracks =
response?.captions?.playerCaptionsTracklistRenderer?.captionTracks ?? [];
const playerCaptions = response?.captions?.playerCaptionsTracklistRenderer;
if (!playerCaptions) {
return [];
}

let captionTracks = playerCaptions.captionTracks ?? [];
const translationLanguages = playerCaptions.translationLanguages ?? [];
const userLang = localizationProvider.lang;
const userLangSupported = translationLanguages.find(
(language) => language.languageCode === userLang,
);
const asrLang =
captionTracks.find((captionTrack) => captionTrack?.kind === "asr")
?.languageCode ?? "en";
captionTracks = captionTracks.reduce((result, captionTrack) => {
if ("languageCode" in captionTrack) {
const language = captionTrack?.languageCode
? langTo6391(captionTrack?.languageCode)
: undefined;
const url = captionTrack?.url || captionTrack?.baseUrl;
language &&
url &&
result.push({
source: "youtube",
language,
isAutoGenerated: captionTrack?.kind === "asr",
url: `${
url.startsWith("http") ? url : `${window.location.origin}/${url}`
}&fmt=json3`,
});
if (!("languageCode" in captionTrack)) {
return result;
}

const language = captionTrack.languageCode
? langTo6391(captionTrack.languageCode)
: undefined;
const url = captionTrack?.url || captionTrack?.baseUrl;
if (!language || !url) {
return result;
}

const captionUrl = `${
url.startsWith("http") ? url : `${window.location.origin}/${url}`
}&fmt=json3`;
result.push({
source: "youtube",
language,
isAutoGenerated: captionTrack?.kind === "asr",
url: captionUrl,
});

if (
userLangSupported &&
captionTrack.isTranslatable &&
captionTrack.languageCode === asrLang &&
userLang !== language
) {
// add translated youtube subtitles (if it possible)
result.push({
source: "youtube",
language: userLang,
isAutoGenerated: captionTrack?.kind === "asr",
translatedFromLanguage: language,
url: `${captionUrl}&tlang=${userLang}`,
});
}

return result;
}, []);
utils_debug.log("youtube subtitles:", captionTracks);
Expand Down Expand Up @@ -5441,14 +5476,16 @@ function getSubtitlesTokens(subtitles, subtitlesObject) {
const { source, isAutoGenerated } = subtitlesObject;
for (let i = 0; i < subtitles.subtitles.length; i++) {
const line = subtitles.subtitles[i];
if (line?.tokens?.length && !["yandex", "youtube"].includes(source)) {
const hasTokens = line?.tokens?.length;
if (hasTokens && !["yandex", "youtube"].includes(source)) {
console.warn("[VOT] Unsupported subtitles tokens type: ", source);
subtitles.containsTokens = false;
return null;
}

let tokens =
source === "yandex" || (source === "youtube" && isAutoGenerated)
hasTokens &&
(source === "yandex" || (source === "youtube" && isAutoGenerated))
? formatYandexSubtitlesTokens(line)
: createSubtitlesTokens(line, lastToken);
lastToken = tokens[tokens.length - 1];
Expand Down Expand Up @@ -5548,7 +5585,13 @@ async function fetchSubtitles(subtitlesObject) {
}

async function subtitles_getSubtitles(client, videoData) {
const { host, url, requestLang, videoId, duration } = videoData;
const {
host,
url,
detectedLanguage: requestLang,
videoId,
duration,
} = videoData;
const ytSubtitles = host === "youtube" ? youtubeUtils.getSubtitles() : [];

const timeoutPromise = new Promise((_, reject) =>
Expand Down Expand Up @@ -7806,7 +7849,7 @@ class VideoHandler {
s.translatedFromLanguage.toUpperCase()
}`
: "") +
(s.source !== "yandex" ? ` ${s.source}` : "") +
(s.source !== "yandex" ? `, ${s.source}` : "") +
(s.isAutoGenerated
? ` (${localizationProvider.get("VOTAutogenerated")})`
: ""),
Expand Down

0 comments on commit 125a2d8

Please sign in to comment.