From e18cb56d614e488c1ece875ad97e029df6aef409 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Tue, 1 Mar 2022 18:37:28 +0300 Subject: Fixed settings not being applied to Piped --- .../helpers/youtube/invidious-cookies.js | 61 ---------------------- .../helpers/youtube/piped-preferences.js | 34 ++++++++++++ src/assets/javascripts/helpers/youtube/youtube.js | 56 ++++++++++++++++---- src/manifest.json | 3 +- src/pages/background/background.js | 9 ++-- src/pages/options/youtube/youtube.html | 2 +- src/pages/options/youtube/youtube.js | 3 -- 7 files changed, 85 insertions(+), 83 deletions(-) delete mode 100644 src/assets/javascripts/helpers/youtube/invidious-cookies.js create mode 100644 src/assets/javascripts/helpers/youtube/piped-preferences.js (limited to 'src') diff --git a/src/assets/javascripts/helpers/youtube/invidious-cookies.js b/src/assets/javascripts/helpers/youtube/invidious-cookies.js deleted file mode 100644 index 78df3d27..00000000 --- a/src/assets/javascripts/helpers/youtube/invidious-cookies.js +++ /dev/null @@ -1,61 +0,0 @@ - -window.browser = window.browser || window.chrome; - -function getCookie() { - for (const c of document.cookie.split(";")) { - while (c.charAt(0) == " ") c = c.substring(1, c.length); - if (c.indexOf("PREFS=") == 0) - return JSON.parse( - decodeURIComponent(c.substring("PREFS=".length, c.length)) - ); - } - return {}; -} - -browser.storage.local.get( - [ - "invidiousAlwaysProxy", - "invidiousSubtitles", - "invidiousPlayerStyle", - "youtubeVolume", - "youtubeAutoplay", - "OnlyEmbeddedVideo", - "youtubeTheme", - "invidiousVideoQuality", - ], (result) => { - let prefs = getCookie(); - let changed = false; - - if (result.invidiousAlwaysProxy !== undefined && prefs.local !== result.invidiousAlwaysProxy) { - prefs.local = result.invidiousAlwaysProxy; - changed = true; - } - if (result.invidiousVideoQuality !== undefined && prefs.quality !== result.invidiousVideoQuality) { - prefs.quality = result.invidiousVideoQuality; - changed = true; - } - if (result.youtubeTheme !== undefined && prefs.dark_mode !== result.youtubeTheme) { - prefs.dark_mode = result.youtubeTheme; - changed = true; - } - if (result.youtubeVolume !== undefined && prefs.volume !== result.youtubeVolume) { - prefs.volume = result.youtubeVolume; - changed = true; - } - if (result.invidiousPlayerStyle !== undefined && prefs.player_style !== result.invidiousPlayerStyle) { - prefs.player_style = result.invidiousPlayerStyle; - changed = true; - } - if (result.invidiousSubtitles !== undefined && prefs.subtitles === result.invidiousSubtitles) { - prefs.subtitles = result.invidiousSubtitles; - changed = true; - } - if (result.youtubeAutoplay !== undefined && prefs.autoplay !== result.youtubeAutoplay) { - prefs.autoplay = result.youtubeAutoplay; - changed = true; - } - - if (changed) document.cookie = `PREFS=${encodeURIComponent(JSON.stringify(prefs))}`; - - } -) diff --git a/src/assets/javascripts/helpers/youtube/piped-preferences.js b/src/assets/javascripts/helpers/youtube/piped-preferences.js new file mode 100644 index 00000000..5803a1ae --- /dev/null +++ b/src/assets/javascripts/helpers/youtube/piped-preferences.js @@ -0,0 +1,34 @@ +window.browser = window.browser || window.chrome; + +browser.storage.local.get( + [ + "youtubeTheme", + "youtubeVolume", + "youtubeAutoplay" + ], + res => { + if ( + res.youtubeTheme != "DEFAULT" && + localStorage.getItem("theme") != res.youtubeTheme + ) + localStorage.setItem("theme", res.youtubeTheme); + + if ( + res.youtubeVolume != "--" && + localStorage.getItem("volume") != res.youtubeVolume + ) + localStorage.setItem("volume", res.youtubeVolume / 100); + + if ( + res.youtubeAutoplay != "DEFAULT" && + localStorage.getItem("playerAutoPlay") != res.youtubeAutoplay + ) + localStorage.setItem("playerAutoPlay", res.youtubeAutoplay); + } +) + +window.onunload = () => { + localStorage.removeItem("theme"); + localStorage.removeItem("volume"); + localStorage.removeItem("playerAutoPlay"); +}; diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js index 304ebc25..eb5613b6 100644 --- a/src/assets/javascripts/helpers/youtube/youtube.js +++ b/src/assets/javascripts/helpers/youtube/youtube.js @@ -451,7 +451,12 @@ function isPipedorInvidious(url, type) { } function isUrlPipedorInvidious(url, frontend) { - url = new URL(url); + try { + url = new URL(url); + } + catch (error) { + return + } let protocolHost = `${url.protocol}//${url.host}`; if (frontend == 'invidious') @@ -484,16 +489,9 @@ function isUrlPipedorInvidious(url, frontend) { } function addUrlParams(url) { - console.log("addUrlParams"); let protocolHost = `${url.protocol}//${url.host}`; let isChanged = false; - console.log("AddingprotocolHost", protocolHost); - console.log([ - ...redirects.invidious.normal, - ...redirects.invidious.tor, - ...invidiousNormalCustomRedirects, - ...invidiousTorCustomRedirects, - ]) + console.log("Adding URL Params", protocolHost); if ( [ ...redirects.invidious.normal, @@ -566,16 +564,51 @@ function addUrlParams(url) { else return; } -function invidiousInitCookies(tabId) { +function initPipedLocalStorage(url, tabId) { browser.tabs.executeScript( tabId, { - file: "/assets/javascripts/helpers/youtube/invidious-cookies.js", + file: "/assets/javascripts/helpers/youtube/piped-preferences.js", runAt: "document_start" } ); } +function invidiousInitCookies(url) { + console.log("invidiousInitCookies"); + browser.cookies.get({ + url: url, + name: "PREFS" + }).then( + cookie => { + let prefs = {}; + if (cookie) prefs = JSON.parse(decodeURIComponent(cookie.value)); + let oldPrefs = { ...prefs }; + + if (invidiousAlwaysProxy != "DEFAULT" && prefs.local !== invidiousAlwaysProxy) prefs.local = invidiousAlwaysProxy; + + if (invidiousVideoQuality != "DEFAULT" && prefs.quality !== invidiousVideoQuality) prefs.quality = invidiousVideoQuality; + + if (theme != "DEFAULT" && prefs.dark_mode !== theme) prefs.dark_mode = theme; + + if (volume != "--" && prefs.volume !== volume) prefs.volume = volume; + + if (invidiousPlayerStyle != "DEFAULT" && prefs.player_style !== invidiousPlayerStyle) prefs.player_style = invidiousPlayerStyle; + + if (invidiousSubtitles != "DEFAULT" && prefs.subtitles === invidiousSubtitles) prefs.subtitles = invidiousSubtitles; + + if (autoplay != "DEFAULT" && prefs.autoplay !== autoplay) prefs.autoplay = autoplay; + + if (oldPrefs != prefs) + browser.cookies.set({ + url: url, + name: "PREFS", + value: encodeURIComponent(JSON.stringify(prefs)) + }) + } + ); +} + async function init() { return new Promise((resolve) => { fetch('/instances/data.json').then(response => response.text()).then(data => { @@ -663,6 +696,7 @@ export default { getBypassWatchOnYoutube, setBypassWatchOnYoutube, invidiousInitCookies, + initPipedLocalStorage, getFrontend, setFrontend, diff --git a/src/manifest.json b/src/manifest.json index 21f6a2c6..d9286bce 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -18,6 +18,7 @@ "storage", "webRequest", "webRequestBlocking", + "cookies", "" ], "browser_action": { @@ -37,6 +38,6 @@ "open_in_tab": true }, "web_accessible_resources": [ - "assets/javascripts/helpers/youtube/invidious-cookies.js" + "assets/javascripts/helpers/youtube/piped-preferences.js" ] } \ No newline at end of file diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 1f096b4c..d77495e0 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -72,13 +72,10 @@ browser.webRequest.onBeforeRequest.addListener( if (wikipediaHelper.isWikipedia(url, initiator)) newUrl = wikipediaHelper.redirect(url); - if (youtubeHelper.isPipedorInvidious(newUrl ?? url, details.type)) newUrl = youtubeHelper.addUrlParams(newUrl ?? url); - if (exceptionsHelper.isException(url, initiator)) newUrl = null; if (bybassTabs.includes(details.tabId)) newUrl = null; - if (newUrl) { if (newUrl == 'CANCEL') { console.log(`Canceled ${url}`); @@ -108,7 +105,7 @@ browser.tabs.onRemoved.addListener((tabId) => { browser.tabs.onUpdated.addListener( - (tabId, changeInfo) => { - if (changeInfo.url && youtubeHelper.isUrlPipedorInvidious(changeInfo.url, 'invidious')) - youtubeHelper.invidiousInitCookies(tabId); + (tabId, changeInfo, _) => { + if (changeInfo.url && youtubeHelper.isUrlPipedorInvidious(changeInfo.url, 'piped')) youtubeHelper.initPipedLocalStorage(changeInfo.url, tabId); + if (changeInfo.url && youtubeHelper.isUrlPipedorInvidious(changeInfo.url, 'invidious')) youtubeHelper.invidiousInitCookies(changeInfo.url); }); \ No newline at end of file diff --git a/src/pages/options/youtube/youtube.html b/src/pages/options/youtube/youtube.html index 3e0bd638..b86936b1 100644 --- a/src/pages/options/youtube/youtube.html +++ b/src/pages/options/youtube/youtube.html @@ -96,8 +96,8 @@

Frontend

diff --git a/src/pages/options/youtube/youtube.js b/src/pages/options/youtube/youtube.js index f1bd6351..cc87edbe 100644 --- a/src/pages/options/youtube/youtube.js +++ b/src/pages/options/youtube/youtube.js @@ -8,9 +8,6 @@ let pipedDivElement = document.getElementById("piped"); let invidiousPipedDivElement = document.getElementById("invidious-piped"); let freetubeYatteeDivElement = document.getElementById("freetube-yatte"); - - - function changeFrontendsSettings(frontend) { if (frontend == 'piped') { invidiousPipedDivElement.style.display = 'block' -- cgit 1.4.1