diff --git a/src/index.js b/src/index.js index e8092f97..6c9cff43 100644 --- a/src/index.js +++ b/src/index.js @@ -238,7 +238,7 @@ class VideoHandler { this.srcObserver.observe(this.video, { attributeFilter: ["src", "currentSrc"], }); - this.video.addEventListener("canplaythrough", this.handleSrcChanged); + this.video.addEventListener("loadeddata", this.handleSrcChangedBound); this.stopTranslationBound = this.stopTranslation.bind(this); this.handleVideoEventBound = this.handleVideoEvent.bind(this); this.changeOpacityOnEventBound = this.changeOpacityOnEvent.bind(this); @@ -1270,6 +1270,7 @@ class VideoHandler { if (!(this.firstPlay && this.data.autoTranslate === 1)) { return; } + const VIDEO_ID = getVideoId(this.site.host, this.video); if (!VIDEO_ID) { @@ -1277,6 +1278,7 @@ class VideoHandler { } try { + this.videoData = await this.getVideoData(); await this.translateExecutor(VIDEO_ID); this.firstPlay = false; } catch (err) { @@ -1480,7 +1482,7 @@ class VideoHandler { videoData.translationHelp = null; // ! should be null for ALL websites except coursera and udemy ! videoData.isStream = false; // by default, we request the translation of the video - videoData.duration = this.video.duration; // ! if 0 - we get 400 error + videoData.duration = this.video?.duration || 343; // ! if 0 - we get 400 error videoData.videoId = getVideoId(this.site.host, this.video); videoData.detectedLanguage = this.translateFromLang; videoData.responseLanguage = this.translateToLang; @@ -1682,6 +1684,9 @@ class VideoHandler { console.log("[VOT] Video Data: ", this.videoData); const videoURL = `${this.site.url}${VIDEO_ID}`; + // fix enabling the old requested voiceover when changing the language to the native language (#) + this.videoValidator(); + if (isStream) { debug.log("Executed stream translation"); // if (BUILD_MODE === "cloudflare") { @@ -2056,10 +2061,11 @@ class VideoHandler { } async handleSrcChanged() { + if (!this.video.duration) return; + debug.log("[VideoHandler] src changed", this); if (!(await this.waitInitialization())) return; - if (!this.video.duration) return; this.stopTranslation();