about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/assets/javascripts/helpers/youtube/invidious-cookies.js57
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js8
-rw-r--r--src/pages/background/background.js6
3 files changed, 52 insertions, 19 deletions
diff --git a/src/assets/javascripts/helpers/youtube/invidious-cookies.js b/src/assets/javascripts/helpers/youtube/invidious-cookies.js
index 6a168b83..cefbddd8 100644
--- a/src/assets/javascripts/helpers/youtube/invidious-cookies.js
+++ b/src/assets/javascripts/helpers/youtube/invidious-cookies.js
@@ -1,8 +1,6 @@
 
 function getCookie() {
-    let ca = document.cookie.split(";");
-    for (let i = 0; i < ca.length; i++) {
-        let c = ca[i];
+    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(
@@ -15,24 +13,47 @@ function getCookie() {
 browser.storage.sync.get(
     [
         "invidiousAlwaysProxy",
-        "invidiousVideoQuality",
-        "invidiousDarkMode",
-        "OnlyEmbeddedVideo",
-        "volume",
-        "invidiousPlayerStyle",
         "invidiousSubtitles",
-        "autoplay",
+        "invidiousPlayerStyle",
+        "youtubeVolume",
+        "youtubeAutoplay",
+        "OnlyEmbeddedVideo",
+        "youtubeTheme",
+        "invidiousVideoQuality",
     ], (result) => {
-        const prefs = getCookie();
+        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;
+        }
 
-        prefs.local = result.invidiousAlwaysProxy;
-        prefs.quality = result.invidiousVideoQuality;
-        prefs.dark_mode = result.invidiousDarkMode;
-        prefs.volume = result.volume;
-        prefs.player_style = result.invidiousPlayerStyle;
-        prefs.subtitles = result.invidiousSubtitles;
-        prefs.autoplay = result.autoplay;
+        if (changed) document.cookie = `PREFS=${encodeURIComponent(JSON.stringify(prefs))}`;
 
-        document.cookie = `PREFS=${encodeURIComponent(JSON.stringify(prefs))}`;
     }
 )
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index 8577f849..802a73d0 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -300,6 +300,12 @@ function isPipedorInvidious(url, type) {
   return (type === "main_frame" || type === "sub_frame") && [...redirects.invidious.normal, ...redirects.piped.normal].includes(protocolHost);
 }
 
+function isUrlPipedorInvidious(url) {
+  url = new URL(url);
+  let protocolHost = `${url.protocol}//${url.host}`;
+  return [...redirects.invidious.normal, ...redirects.piped.normal].includes(protocolHost);
+}
+
 function addUrlParams(url) {
 
   let protocolHost = `${url.protocol}//${url.host}`;
@@ -360,7 +366,6 @@ function addUrlParams(url) {
     }
 
   }
-
   if (isChanged) return url.href;
   else return;
 }
@@ -449,6 +454,7 @@ export default {
   isYoutube,
 
   isPipedorInvidious,
+  isUrlPipedorInvidious,
   addUrlParams,
 
   getDisable,
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index ae5ccdf9..69d027bb 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -103,6 +103,12 @@ browser.webRequest.onResponseStarted.addListener(
   { urls: ["<all_urls>"] }
 );
 
+browser.tabs.onUpdated.addListener(
+  (tabId, changeInfo) => {
+    if (changeInfo.url && youtubeHelper.isUrlPipedorInvidious(changeInfo.url))
+      youtubeHelper.invidiousInitCookies(tabId);
+  });
+
 function changeInstance(url) {
   var tabUrl = new URL(url);
   var protocolHost = `${tabUrl.protocol}//${tabUrl.host}`;