From 52663194eca2ed78e5fb7171955ce1c9b7c95765 Mon Sep 17 00:00:00 2001 From: sguenter Date: Thu, 25 Apr 2024 18:08:00 +0200 Subject: [PATCH] Fixed Quality Setting --- electron/src/iframeInjection.ts | 44 ++++++++++++------- .../YoutubePlayer/YoutubePlayer.tsx | 6 ++- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/electron/src/iframeInjection.ts b/electron/src/iframeInjection.ts index e3fc8c9..1d1c3c0 100644 --- a/electron/src/iframeInjection.ts +++ b/electron/src/iframeInjection.ts @@ -1,13 +1,14 @@ -async function getElement(selector: string): Promise { - const element = document.querySelector(selector); - if (!element) { - await new Promise((resolve) => setTimeout(resolve, 100)); - return getElement(selector); - } - return element as HTMLElement; -} +const TRY_DURATION = 3000; function trySettingQuality() { + const hiddenSelectors = [".ytp-gradient-top", ".ytp-chrome-top.ytp-show-cards-title", ".ytp-gradient-bottom", ".ytp-chrome-bottom", ".branding-img-container", ".ytp-settings-menu"]; + hiddenSelectors.forEach(selector => { + const element = document.querySelector(`${selector}`) as HTMLElement; + if (element) { + element.style.visibility = "hidden"; + } + }); + const qualityMenu = document.querySelector(".ytp-settings-menu") as HTMLElement; if (!qualityMenu) { console.log("No settings menu found!"); @@ -15,7 +16,6 @@ function trySettingQuality() { } qualityMenu.style.height = "auto" qualityMenu.style.overflowX = "auto"; - qualityMenu.style.visibility = "hidden"; const settingsButton = document.querySelector(".ytp-settings-button") as HTMLElement; if (!settingsButton) { @@ -28,6 +28,7 @@ function trySettingQuality() { const qualityButton = menuItems.find(item => { return item.innerHTML.includes("Qualität") || item.innerHTML.includes("Quality"); }); + if (!qualityButton) { console.log("No quality buton found!"); settingsButton.click(); @@ -61,17 +62,28 @@ function trySettingQuality() { } qualityElement.click(); - return true; } -document.addEventListener("DOMContentLoaded", async () => { - console.log("Setting Quality...") - while (!trySettingQuality()) { +async function setQuality() { + const start = Date.now(); + let diff = 0; + while (!trySettingQuality() && diff < TRY_DURATION) { + console.log("Try Setting Quality...") await new Promise((resolve) => setTimeout(resolve, 300)); + diff = Date.now() - start; } - const controls = await getElement(".ytp-chrome-bottom"); - controls.style.visibility = "hidden"; - console.log("Setting Quality done!"); + if (diff >= TRY_DURATION) { + console.log("Setting Quality failed!"); + } else { + console.log("Setting Quality done!"); + } +} + +document.addEventListener("DOMContentLoaded", setQuality); +window.addEventListener("message", ev => { + if (ev.data === "setQuality") { + setQuality(); + } }); diff --git a/src/application/components/YoutubePlayer/YoutubePlayer.tsx b/src/application/components/YoutubePlayer/YoutubePlayer.tsx index 390437d..5b10b5e 100644 --- a/src/application/components/YoutubePlayer/YoutubePlayer.tsx +++ b/src/application/components/YoutubePlayer/YoutubePlayer.tsx @@ -25,7 +25,11 @@ export const YoutubePlayer = withMemo(function YoutubePlayer({id}: YoutubePlayer // Callbacks const setIsNotPlaying = useCallback(() => setIsPlaying(false), []); - const setIsCurrentlyPlaying = useCallback(() => setIsPlaying(true), []); + const setIsCurrentlyPlaying = useCallback(() => { + setIsPlaying(true); + const iframe = document.querySelector("iframe"); + iframe?.contentWindow?.postMessage("setQuality", "https://www.youtube.com"); + }, []); const informAboutVideo = useCallback(() => { if (!player) {