Skip to content

Commit

Permalink
fix coursera (#779)
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyhalight committed Aug 24, 2024
1 parent 49cb378 commit e777e96
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 29 deletions.
11 changes: 6 additions & 5 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@

# 1.6.x

- Изменен загрузчик стилей при сборке расширения, благодаря этому скорость сборки стала немного быстрее, а итоговый размер кода, отвечающего за стили, уменьшен в ~1.65 раза
- Исправлена работа расширения без наличия WebAudio (#749)
- Исправлена ошибка из-за которой кнопка перевода могла не появляться до первичного получения субтитров или завершения автоперевода
- Исправлена ошибка из-за которой при смене адреса worker прокси-сервера домен сразу применялся, даже, если проксирование аудио выключено
- Автоперевод и первичное получение субтитров, теперь, происходит параллельно
- Добавлена настройка горячей клавиши перевода (#485 в #760)
- Добавлена поддержка путей `/inbox/` и `/bk/` для Видео Mail.ru (#763)
- Добавлена поддержка 9animetv (#748)
- Добавлена поддержка EpicGames Developers (#255, #505)
- Добавлена поддержка Odysee (#755)
<!-- - Добавлена возможность подсветки слов для субтитров сделанными на YouTube -->
- Изменен загрузчик стилей при сборке расширения, благодаря этому скорость сборки стала немного быстрее, а итоговый размер кода, отвечающего за стили, уменьшен в ~1.65 раза
- Исправлена работа расширения без наличия WebAudio (#749)
- Исправлена ошибка из-за которой кнопка перевода могла не появляться до первичного получения субтитров или завершения автоперевода
- Исправлена ошибка из-за которой при смене адреса worker прокси-сервера домен сразу применялся, даже, если проксирование аудио выключено
- Автоперевод и первичное получение субтитров, теперь, происходит параллельно
- Некоторые другие мелкие улучшения

# 1.6.1
Expand Down
38 changes: 19 additions & 19 deletions dist/vot-min.user.js

Large diffs are not rendered by default.

104 changes: 100 additions & 4 deletions dist/vot.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -3368,6 +3368,101 @@ class UdemyHelper extends BaseHelper {
return url.pathname.slice(1);
}
}
;// CONCATENATED MODULE: ./node_modules/vot.js/dist/helpers/coursera.js






class CourseraHelper extends BaseHelper {
API_ORIGIN = "https://www.coursera.org/api";

async getCourseData(courseId) {
const response = await this.fetch(
`${this.API_ORIGIN}/onDemandCourses.v1/${courseId}`,
);
const resJSON = await response.json();
return resJSON?.elements?.[0];
}

getPlayer() {
return document.querySelector(".vjs-v6");
}

getPlayerData() {
return this.getPlayer()?.player;
}

findVideoUrl(sources) {
return sources?.find((src) => src.type === "video/mp4")?.src;
}

findSubtitleUrl(captions, detectedLanguage) {
let subtitle = captions?.find(
(caption) => langTo6391(caption.srclang) === detectedLanguage,
);

if (!subtitle) {
subtitle = captions?.find(
(caption) => langTo6391(caption.srclang) === "en",
) || captions?.[0];
}

return subtitle?.src;
}

async getVideoData(videoId) {
const data = this.getPlayerData();

const { duration } = data?.cache_ || {};
const { courseId, tracks, sources } = data?.options_ || {};

const videoUrl = this.findVideoUrl(sources);
if (!videoUrl) {
console.log("Failed to find .mp4 video file in sources", sources);
return undefined;
}

const { primaryLanguageCodes } = await this.getCourseData(courseId);
let courseLang = primaryLanguageCodes?.[0];
courseLang = courseLang ? langTo6391(courseLang) : "en";

if (!availableLangs.includes(courseLang)) {
courseLang = "en";
}

const subtitleUrl = this.findSubtitleUrl(tracks, courseLang);
if (!subtitleUrl) {
console.log("Failed to find subtitle file in tracks", tracks)
}

return {
...subtitleUrl ? {
url: sites.find((s) => s.host === VideoService.coursera).url + videoId,
translationHelp: [
{
target: "subtitles_file_url",
targetUrl: subtitleUrl,
},
{
target: "video_file_url",
targetUrl: videoUrl,
},
],
detectedLanguage: courseLang,
} : {
url: videoUrl,
translationHelp: null,
},
duration,
};
}

async getVideoId(url) {
return /learn\/([^/]+)\/lecture\/([^/]+)/.exec(url.pathname)?.[0]; // <-- COURSE PASSING (IF YOU LOGINED TO COURSERA)
}
}
;// CONCATENATED MODULE: ./node_modules/vot.js/dist/helpers/index.js


Expand Down Expand Up @@ -3395,6 +3490,8 @@ class UdemyHelper extends BaseHelper {








Expand All @@ -3413,6 +3510,7 @@ class VideoHelper {
static [VideoService.twitch] = new TwitchHelper();
static [VideoService.coursehunter] = new CoursehunterHelper();
static [VideoService.udemy] = new UdemyHelper();
static [VideoService.coursera] = new CourseraHelper();
}

;// CONCATENATED MODULE: ./node_modules/vot.js/dist/utils/videoData.js
Expand Down Expand Up @@ -5061,10 +5159,8 @@ function isMobile() {
}

function getPlayer() {
if (window.location.pathname.startsWith("/shorts/")) {
return isMobile()
? document.querySelector("#movie_player")
: document.querySelector("#shorts-player");
if (window.location.pathname.startsWith("/shorts/") && !isMobile()) {
return document.querySelector("#shorts-player");
}

return document.querySelector("#movie_player");
Expand Down
28 changes: 27 additions & 1 deletion patches/vot.js+1.1.0+007+added-coursera.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/node_modules/vot.js/dist/config/sites.js b/node_modules/vot.js/dist/config/sites.js
index adf37b3..7ab6721 100644
index 9b95b70..082212c 100644
--- a/node_modules/vot.js/dist/config/sites.js
+++ b/node_modules/vot.js/dist/config/sites.js
@@ -339,6 +339,14 @@ export default [
Expand Down Expand Up @@ -169,6 +169,32 @@ index 241d5cf..b0cf962 100644
}
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/vot.js/dist/helpers/index.js b/node_modules/vot.js/dist/helpers/index.js
index f8e2601..38871c4 100644
--- a/node_modules/vot.js/dist/helpers/index.js
+++ b/node_modules/vot.js/dist/helpers/index.js
@@ -13,6 +13,7 @@ import OdyseeHelper from "./odysee.js";
import CoursehunterHelper from "./coursehunter.js";
import TwitchHelper from "./twitch.js";
import UdemyHelper from "./udemy.js";
+import CourseraHelper from "./coursera.js";
export * as MailRuHelper from "./mailru.js";
export * as WeverseHelper from "./weverse.js";
export * as KodikHelper from "./kodik.js";
@@ -27,6 +28,7 @@ export * as OdyseeHelper from "./odysee.js";
export * as CoursehunterHelper from "./coursehunter.js";
export * as TwitchHelper from "./twitch.js";
export * as UdemyHelper from "./udemy.js";
+export * as CourseraHelper from "./udemy.js";
export default class VideoHelper {
static [VideoService.mailru] = new MailRuHelper();
static [VideoService.weverse] = new WeverseHelper();
@@ -42,4 +44,5 @@ export default class VideoHelper {
static [VideoService.twitch] = new TwitchHelper();
static [VideoService.coursehunter] = new CoursehunterHelper();
static [VideoService.udemy] = new UdemyHelper();
+ static [VideoService.coursera] = new CourseraHelper();
}
diff --git a/node_modules/vot.js/dist/types/helpers/coursera.d.ts b/node_modules/vot.js/dist/types/helpers/coursera.d.ts
new file mode 100644
index 0000000..15d378e
Expand Down

0 comments on commit e777e96

Please sign in to comment.