Skip to content

Commit

Permalink
added support view video in client player (without open public link, …
Browse files Browse the repository at this point in the history
…only for /client/disk)
  • Loading branch information
ilyhalight committed Nov 4, 2024
1 parent 273ddec commit 5a51f92
Show file tree
Hide file tree
Showing 6 changed files with 626 additions and 23 deletions.
4 changes: 2 additions & 2 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
<!-- добавить чанковую загрузку аудио файла в новом плеере -->
<!-- Вынести HLS в отдельный плеер (?) -->

# 1.7.1 [WIP]
# 1.7.1

- Добавлена поддержка Coursetrain (coursetrain.net) (#706)
- Добавлена поддержка Ricktube (ricktube.ru)
- Добавлена поддержка Bilibili Bangumi (#852)
- Добавлена поддержка Incestflix (#705)
- Добавлена поддержка субтитров от сайта для Vimeo
- Включен обход Media CSP для player.vimeo.com
<!-- - Добавлена поддержка просмотра видео в плеере без перехода по публичной ссылке для Яндекс Диска (Вы все еще должны открыть публичный доступ к файлу (Не к папке!!!)) (#837) -->
- Добавлена поддержка просмотра видео в плеере Яндекс Диска без перехода по публичной ссылка (Вы все еще должны открыть публичный доступ к файлу (Не к папке!!!)) (#837)
- Исправлено долгое ожидание перевода для новых запросов на перевод для YouTube (статус = 6) ([1#issuecomment-2433274910](https://github.com/ilyhalight/voice-over-translation/issues/1#issuecomment-2433274910), [868#issuecomment-2436080833](https://github.com/ilyhalight/voice-over-translation/issues/868#issuecomment-2436080833))
- Исправлена работа встраиваемого плеера Vimeo (player.vimeo.com), если видео залито в приватный доступ и доступно только через встраивание (#543, #828)
- Переработан новый аудиоплеер, который полностью работает на AudioContext
Expand Down
10 changes: 5 additions & 5 deletions dist/vot-min.user.js

Large diffs are not rendered by default.

117 changes: 102 additions & 15 deletions dist/vot.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
// @match *://*.dailymotion.com/*
// @match *://*.ok.ru/*
// @match *://trovo.live/*
// @match *://disk.yandex.ru/i/*
// @match *://disk.yandex.ru/*
// @match *://youtube.googleapis.com/embed/*
// @match *://*.banned.video/*
// @match *://*.weverse.io/*
Expand Down Expand Up @@ -2385,11 +2385,12 @@ const sitesCoursehunterLike = ["coursehunter.net", "coursetrain.net"];
},
{
host: VideoService.yandexdisk,
url: "https://yadi.sk/i/",
url: "https://yadi.sk/",
match: /^disk.yandex.ru$/,
selector: ".video-player__player > div:nth-child(1)",
eventSelector: ".video-player__player",
needBypassCSP: true,
needExtraData: true,
},
{
host: VideoService.okru,
Expand Down Expand Up @@ -4461,11 +4462,109 @@ class VimeoHelper extends BaseHelper {
}
}

;// ./src/utils/VOTLocalizedError.js


class VOTLocalizedError extends Error {
constructor(message) {
super(localizationProvider.getDefault(message));
this.name = "VOTLocalizedError";
this.unlocalizedMessage = message;
this.localizedMessage = localizationProvider.get(message);
}
}

;// ./node_modules/vot.js/dist/helpers/yandexdisk.js


class YandexDiskHelper extends BaseHelper {
API_ORIGIN = "https://disk.yandex.ru";
CLIENT_PREFIX = "/client/disk";
async getVideoData(videoId) {
if (!videoId.startsWith(this.CLIENT_PREFIX)) {
return {
url: this.service.url + videoId,
};
}

const url = new URL(window.location);
const dialogId = url.searchParams.get("idDialog");
if (!dialogId) {
return undefined;
}

const preloadedScript = document.querySelector("#preloaded-data");
if (!preloadedScript) {
return undefined;
}

try {
const preloadedData = JSON.parse(preloadedScript.innerText);
const { idClient, sk } = preloadedData.config;
const res = await this.fetch(this.API_ORIGIN + "/models/?_m=resource", {
method: "POST",
body: new URLSearchParams({
idClient,
sk,
"_model.0": "resource",
"id.0": dialogId.replaceAll(" ", "+"),
})
.toString()
.replaceAll(/%2B/g, "+"), // yandex requires this
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
});

const data = await res.json();
if (!data.models) {
throw new VideoHelperError("Failed to get resource info");
}

const model = data.models[0];
const modelData = model.data;
if (Object.hasOwn(modelData, "error")) {
throw new VideoHelperError(modelData.error?.message);
}

const { meta, name } = modelData;
const { short_url, video_info } = meta;
if (!video_info) {
throw new VideoHelperError("There's no video open right now");
}

if (!short_url) {
throw new VideoHelperError("VOTLimitedVideoAccess");
}

const title = name.replace(/(\.[^.]+)$/, "");

return {
url: short_url,
title,
duration: video_info.duration,
};
} catch (err) {
if (err.message?.startsWith("VOT")) {
throw new VOTLocalizedError(err.message);
}

console.error(
`Failed to get yandex disk video data by video ID: ${videoId}`,
err.message,
);
return undefined;
}
}
async getVideoId(url) {
return /\/i\/([^/]+)/.exec(url.pathname)?.[1];
const fileId = /\/i\/([^/]+)/.exec(url.pathname)?.[1];
if (fileId) {
return fileId;
}

return url.pathname.startsWith(this.CLIENT_PREFIX)
? url.pathname + url.search
: undefined;
}
}

Expand Down Expand Up @@ -4839,18 +4938,6 @@ function convertVOT(service, videoId, url) {
};
}

;// ./src/utils/VOTLocalizedError.js


class VOTLocalizedError extends Error {
constructor(message) {
super(localizationProvider.getDefault(message));
this.name = "VOTLocalizedError";
this.unlocalizedMessage = message;
this.localizedMessage = localizationProvider.get(message);
}
}

;// ./node_modules/vot.js/dist/client.js


Expand Down
Loading

0 comments on commit 5a51f92

Please sign in to comment.