about summary refs log tree commit diff stats
path: root/src/assets
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-03-13 00:32:25 +0300
committerManeraKai <manerakai@protonmail.com>2022-03-13 00:32:25 +0300
commita8ae61c32b828e1389df6b179f60f6d52ff63d42 (patch)
treed7376ef1092c80bd35d65c1fe87a80bee1d74c95 /src/assets
parentForgot a small change in manifest #106 (diff)
downloadlibredirect-a8ae61c32b828e1389df6b179f60f6d52ff63d42.zip
Added almost all invidious settings #104
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/helpers/youtube/invidious-options.js177
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js406
2 files changed, 413 insertions, 170 deletions
diff --git a/src/assets/javascripts/helpers/youtube/invidious-options.js b/src/assets/javascripts/helpers/youtube/invidious-options.js
new file mode 100644
index 00000000..44695a38
--- /dev/null
+++ b/src/assets/javascripts/helpers/youtube/invidious-options.js
@@ -0,0 +1,177 @@
+export let invidiousQuality;
+export const getinvidiousQuality = () => invidiousQuality;
+export function setinvidiousQuality(val) {
+    invidiousQuality = val;
+    browser.storage.local.set({ invidiousQuality })
+    console.log("invidiousQuality: ", invidiousQuality)
+}
+
+export let invidiousAlwaysProxy;
+export const getInvidiousAlwaysProxy = () => invidiousAlwaysProxy;
+export function setInvidiousAlwaysProxy(val) {
+    invidiousAlwaysProxy = val;
+    browser.storage.local.set({ invidiousAlwaysProxy })
+    console.log("invidiousAlwaysProxy: ", invidiousAlwaysProxy);
+}
+
+export let invidiousPlayerStyle;
+export const getInvidiousPlayerStyle = () => invidiousPlayerStyle;
+export function setInvidiousPlayerStyle(val) {
+    invidiousPlayerStyle = val;
+    browser.storage.local.set({ invidiousPlayerStyle })
+    console.log("invidiousPlayerStyle: ", invidiousPlayerStyle)
+}
+
+export let invidiousVideoLoop;
+export const getInvidiousVideoLoop = () => invidiousVideoLoop;
+export function setInvidiousVideoLoop(val) {
+    invidiousVideoLoop = val;
+    browser.storage.local.set({ invidiousVideoLoop })
+    console.log("invidiousVideoLoop: ", invidiousVideoLoop)
+}
+
+export let invidiousContinueAutoplay;
+export const getInvidiousContinueAutoplay = () => invidiousContinueAutoplay;
+export function setInvidiousContinueAutoplay(val) {
+    invidiousContinueAutoplay = val;
+    browser.storage.local.set({ invidiousContinueAutoplay })
+    console.log("invidiousContinueAutoplay: ", invidiousContinueAutoplay)
+}
+
+export let invidiousContinue;
+export const getInvidiousContinue = () => invidiousContinue;
+export function setInvidiousContinue(val) {
+    invidiousContinue = val;
+    browser.storage.local.set({ invidiousContinue })
+    console.log("invidiousContinue: ", invidiousContinue)
+}
+
+export let invidiousListen;
+export const getInvidiousListen = () => invidiousListen;
+export function setInvidiousListen(val) {
+    invidiousListen = val;
+    browser.storage.local.set({ invidiousListen })
+    console.log("invidiousListen: ", invidiousListen)
+}
+
+export let invidiousSpeed;
+export const getInvidiousSpeed = () => invidiousSpeed;
+export function setInvidiousSpeed(val) {
+    invidiousSpeed = val;
+    browser.storage.local.set({ invidiousSpeed })
+    console.log("invidiousSpeed: ", invidiousSpeed)
+}
+
+export let invidiousQualityDash;
+export const getInvidiousQualityDash = () => invidiousQualityDash;
+export function setInvidiousQualityDash(val) {
+    invidiousQualityDash = val;
+    browser.storage.local.set({ invidiousQualityDash })
+    console.log("invidiousQualityDash: ", invidiousQualityDash)
+}
+
+export let invidiousComments;
+export const getInvidiousComments = () => invidiousComments;
+export function setInvidiousComments(val) {
+    invidiousComments = val;
+    browser.storage.local.set({ invidiousComments })
+    console.log("invidiousComments: ", invidiousComments)
+}
+
+
+export let invidiousCaptions;
+export const getInvidiousCaptions = () => invidiousCaptions;
+export function setInvidiousCaptions(val) {
+    invidiousCaptions = val;
+    browser.storage.local.set({ invidiousCaptions })
+    console.log("invidiousCaptions: ", invidiousCaptions)
+}
+
+export let invidiousRelatedVideos;
+export const getInvidiousRelatedVideos = () => invidiousRelatedVideos;
+export function setInvidiousRelatedVideos(val) {
+    invidiousRelatedVideos = val;
+    browser.storage.local.set({ invidiousRelatedVideos })
+    console.log("invidiousRelatedVideos: ", invidiousRelatedVideos)
+}
+
+export let invidiousAnnotations;
+export const getInvidiousAnnotations = () => invidiousAnnotations;
+export function setInvidiousAnnotations(val) {
+    invidiousAnnotations = val;
+    browser.storage.local.set({ invidiousAnnotations })
+    console.log("invidiousAnnotations: ", invidiousAnnotations)
+}
+
+export let invidiousExtendDesc;
+export const getInvidiousExtendDesc = () => invidiousExtendDesc;
+export function setInvidiousExtendDesc(val) {
+    invidiousExtendDesc = val;
+    browser.storage.local.set({ invidiousExtendDesc })
+    console.log("invidiousExtendDesc: ", invidiousExtendDesc)
+}
+
+export let invidiousVrMode;
+export const getInvidiousVrMode = () => invidiousVrMode;
+export function setInvidiousVrMode(val) {
+    invidiousVrMode = val;
+    browser.storage.local.set({ invidiousVrMode })
+    console.log("invidiousVrMode: ", invidiousVrMode)
+}
+
+export let invidiousSavePlayerPos;
+export const getInvidiousSavePlayerPos = () => invidiousSavePlayerPos;
+export function setInvidiousSavePlayerPos(val) {
+    invidiousSavePlayerPos = val;
+    browser.storage.local.set({ invidiousSavePlayerPos })
+    console.log("invidiousSavePlayerPos: ", invidiousSavePlayerPos)
+}
+
+export async function invidiousInit() {
+    return new Promise(
+        resolve => {
+            browser.storage.local.get(
+                [
+                    "invidiousQuality",
+                    "invidiousAlwaysProxy",
+                    "invidiousQuality",
+                    "invidiousPlayerStyle",
+                    "invidiousVideoLoop",
+                    "invidiousContinueAutoplay",
+                    "invidiousContinue",
+                    "invidiousListen",
+                    "invidiousSpeed",
+                    "invidiousQualityDash",
+                    "invidiousComments",
+                    "invidiousCaptions",
+                    "invidiousRelatedVideos",
+                    "invidiousAnnotations",
+                    "invidiousExtendDesc",
+                    "invidiousVrMode",
+                    "invidiousSavePlayerPos",
+                ],
+                r => {
+                    invidiousQuality = r.invidiousQuality ?? 'DEFAULT';
+                    invidiousAlwaysProxy = r.invidiousAlwaysProxy ?? 'DEFAULT';
+                    invidiousPlayerStyle = r.invidiousPlayerStyle ?? 'DEFAULT';
+                    invidiousVideoLoop = r.invidiousVideoLoop ?? 'DEFAULT';
+                    invidiousContinueAutoplay = r.invidiousContinueAutoplay ?? 'DEFAULT';
+                    invidiousContinue = r.invidiousContinue ?? 'DEFAULT';
+                    invidiousListen = r.invidiousListen ?? 'DEFAULT';
+                    invidiousSpeed = r.invidiousSpeed ?? 'DEFAULT';
+                    invidiousQualityDash = r.invidiousQualityDash ?? 'DEFAULT';
+                    invidiousComments = r.invidiousComments ?? ['DEFAULT', 'DEFAULT'];
+                    invidiousCaptions = r.invidiousCaptions ?? ['DEFAULT', 'DEFAULT', 'DEFAULT'];
+                    invidiousRelatedVideos = r.invidiousRelatedVideos ?? 'DEFAULT';
+                    invidiousAnnotations = r.invidiousAnnotations ?? 'DEFAULT';
+                    invidiousExtendDesc = r.invidiousExtendDesc ?? 'DEFAULT';
+                    invidiousVrMode = r.invidiousVrMode ?? 'DEFAULT';
+                    invidiousSavePlayerPos = r.invidiousSavePlayerPos ?? 'DEFAULT';
+
+
+                    resolve();
+                }
+            )
+        }
+    )
+}
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index 0eed1ceb..8044ce4a 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -1,6 +1,73 @@
 "use strict";
 
 import commonHelper from '../common.js'
+import {
+  invidiousQuality,
+  getinvidiousQuality,
+  setinvidiousQuality,
+
+  invidiousAlwaysProxy,
+  setInvidiousAlwaysProxy,
+  getInvidiousAlwaysProxy,
+
+  invidiousPlayerStyle,
+  getInvidiousPlayerStyle,
+  setInvidiousPlayerStyle,
+
+  invidiousInit,
+  invidiousVideoLoop,
+  getInvidiousVideoLoop,
+  setInvidiousVideoLoop,
+
+  invidiousContinueAutoplay,
+  getInvidiousContinueAutoplay,
+  setInvidiousContinueAutoplay,
+
+  invidiousContinue,
+  getInvidiousContinue,
+  setInvidiousContinue,
+
+  invidiousListen,
+  getInvidiousListen,
+  setInvidiousListen,
+
+  invidiousSpeed,
+  getInvidiousSpeed,
+  setInvidiousSpeed,
+
+  invidiousQualityDash,
+  getInvidiousQualityDash,
+  setInvidiousQualityDash,
+
+  invidiousComments,
+  getInvidiousComments,
+  setInvidiousComments,
+
+  invidiousCaptions,
+  getInvidiousCaptions,
+  setInvidiousCaptions,
+
+  invidiousRelatedVideos,
+  getInvidiousRelatedVideos,
+  setInvidiousRelatedVideos,
+
+  invidiousAnnotations,
+  getInvidiousAnnotations,
+  setInvidiousAnnotations,
+
+  invidiousExtendDesc,
+  getInvidiousExtendDesc,
+  setInvidiousExtendDesc,
+
+  invidiousVrMode,
+  getInvidiousVrMode,
+  setInvidiousVrMode,
+
+  invidiousSavePlayerPos,
+  getInvidiousSavePlayerPos,
+  setInvidiousSavePlayerPos,
+
+} from './invidious-options.js'
 
 window.browser = window.browser || window.chrome;
 
@@ -44,6 +111,7 @@ let redirects = {
 
 const getRedirects = () => redirects;
 
+let applyThemeToSites;
 function getCustomRedirects() {
   return {
     "invidious": {
@@ -187,14 +255,6 @@ function setProtocol(val) {
   console.log("youtubeProtocol: ", val)
 }
 
-let invidiousAlwaysProxy;
-function setInvidiousAlwaysProxy(val) {
-  invidiousAlwaysProxy = val;
-  browser.storage.local.set({ invidiousAlwaysProxy })
-  console.log("invidiousAlwaysProxy: ", invidiousAlwaysProxy);
-}
-const getInvidiousAlwaysProxy = () => invidiousAlwaysProxy;
-
 let OnlyEmbeddedVideo;
 function setOnlyEmbeddedVideo(val) {
   OnlyEmbeddedVideo = val;
@@ -203,21 +263,7 @@ function setOnlyEmbeddedVideo(val) {
 }
 const getOnlyEmbeddedVideo = () => OnlyEmbeddedVideo;
 
-let invidiousVideoQuality;
-function setInvidiousVideoQuality(val) {
-  invidiousVideoQuality = val;
-  browser.storage.local.set({ invidiousVideoQuality })
-  console.log("invidiousVideoQuality: ", invidiousVideoQuality)
-}
-const getInvidiousVideoQuality = () => invidiousVideoQuality;
-
 let theme;
-const getTheme = () => theme;
-function setTheme(val) {
-  theme = val;
-  browser.storage.local.set({ theme: theme })
-  console.log("theme: ", theme)
-}
 
 let volume;
 const getVolume = () => volume;
@@ -227,22 +273,6 @@ function setVolume(val) {
   console.log("youtubeVolume: ", volume)
 }
 
-let invidiousPlayerStyle;
-const getInvidiousPlayerStyle = () => invidiousPlayerStyle;
-function setInvidiousPlayerStyle(val) {
-  invidiousPlayerStyle = val;
-  browser.storage.local.set({ invidiousPlayerStyle })
-  console.log("invidiousPlayerStyle: ", invidiousPlayerStyle)
-}
-
-let invidiousSubtitles;
-let getInvidiousSubtitles = () => invidiousSubtitles;
-function setInvidiousSubtitles(val) {
-  invidiousSubtitles = val;
-  browser.storage.local.set({ invidiousSubtitles })
-  console.log("invidiousSubtitles: ", invidiousSubtitles)
-}
-
 let autoplay;
 const getAutoplay = () => autoplay;
 function setAutoplay(val) {
@@ -267,14 +297,6 @@ function setYoutubeEmbedFrontend(val) {
   console.log("youtubeEmbedFrontend: ", youtubeEmbedFrontend)
 }
 
-let persistInvidiousPrefs;
-const getPersistInvidiousPrefs = () => persistInvidiousPrefs;
-function setPersistInvidiousPrefs(val) {
-  persistInvidiousPrefs = val;
-  browser.storage.local.set({ persistInvidiousPrefs })
-  console.log("persistInvidiousPrefs: ", persistInvidiousPrefs)
-}
-
 let bypassWatchOnYoutube;
 const getBypassWatchOnYoutube = () => bypassWatchOnYoutube;
 function setBypassWatchOnYoutube(val) {
@@ -305,7 +327,6 @@ function isException(url) {
   return false;
 }
 
-
 let alwaysUsePreferred;
 function redirect(url, details, initiator) {
   if (disable) return null;
@@ -441,9 +462,6 @@ function redirect(url, details, initiator) {
 
 function changeInstance(url) {
   let protocolHost = `${url.protocol}//${url.host}`;
-
-  console.log("protocolHost", protocolHost);
-
   if (
     protocol == 'normal' &&
     ![
@@ -555,23 +573,7 @@ function initPipedMaterialLocalStorage(tabId) {
   );
 }
 
-let applyThemeToSites;
 function initInvidiousCookies() {
-  let prefs = {};
-  if (invidiousAlwaysProxy != "DEFAULT") prefs.local = invidiousAlwaysProxy == 'true';
-  if (invidiousVideoQuality != "DEFAULT") prefs.quality = invidiousVideoQuality;
-  if (applyThemeToSites && theme != "DEFAULT") prefs.dark_mode = theme;
-  if (volume != "--") prefs.volume = parseInt(volume);
-  if (invidiousPlayerStyle != "DEFAULT") prefs.player_style = invidiousPlayerStyle;
-  if (invidiousSubtitles != "DEFAULT") prefs.subtitles = invidiousSubtitles;
-  if (autoplay != "DEFAULT") prefs.autoplay = autoplay == 'true';
-
-  let allInstances = [
-    ...redirects.invidious.normal,
-    ...redirects.invidious.tor,
-    ...invidiousNormalCustomRedirects,
-    ...invidiousTorCustomRedirects,
-  ]
 
   let checkedInstances = [
     ...invidiousNormalRedirectsChecks,
@@ -580,126 +582,158 @@ function initInvidiousCookies() {
     ...invidiousTorCustomRedirects,
   ];
 
-  for (const item of allInstances)
-    if (!checkedInstances.includes(item))
-      browser.cookies.remove({
-        url: item,
+  for (const instanceUrl of checkedInstances)
+    browser.cookies.get(
+      {
+        url: instanceUrl,
         name: "PREFS",
+      },
+      cookie => {
+        let prefs = {};
+        if (cookie) browser.cookies.remove({ url: instanceUrl, name: "PREFS" })
+
+        if (invidiousAlwaysProxy != "DEFAULT") prefs.local = invidiousAlwaysProxy == 'true';
+        if (applyThemeToSites && theme != "DEFAULT") prefs.dark_mode = theme;
+        if (invidiousVideoLoop != "DEFAULT") prefs.video_loop = invidiousVideoLoop == 'true';
+        if (invidiousContinueAutoplay != "DEFAULT") prefs.continue_autoplay = invidiousContinueAutoplay == 'true';
+        if (invidiousContinue != "DEFAULT") prefs.continue = invidiousContinue == 'true';
+        if (invidiousListen != "DEFAULT") prefs.listen = invidiousListen == 'true';
+        if (invidiousSpeed != "DEFAULT") prefs.speed = parseFloat(invidiousSpeed);
+        if (invidiousQuality != "DEFAULT") prefs.quality = invidiousQuality;
+        if (invidiousQualityDash != "DEFAULT") prefs.quality_dash = invidiousQualityDash;
+
+        if (invidiousComments[0] != "DEFAULT" || invidiousComments[1] != "DEFAULT") prefs.comments = []
+
+        if (invidiousComments[0] != "DEFAULT") prefs.comments[0] = invidiousComments[0];
+        else if (invidiousComments[1] != "DEFAULT") prefs.comments[0] = ""
+        if (invidiousComments[1] != "DEFAULT") prefs.comments[1] = invidiousComments[1];
+        else if (invidiousComments[0] != "DEFAULT") prefs.comments[1] = ""
+
+        if (invidiousCaptions[0] != "DEFAULT" || invidiousCaptions[1] != "DEFAULT" || invidiousCaptions[2] != "DEFAULT") prefs.captions = [];
+
+        if (invidiousCaptions[0] != "DEFAULT") prefs.captions[0] = invidiousCaptions[0];
+        else if (invidiousCaptions[1] != "DEFAULT" || invidiousCaptions[2] != "DEFAULT") prefs.captions[0] = "";
+
+        if (invidiousCaptions[1] != "DEFAULT") prefs.captions[1] = invidiousCaptions[1];
+        else if (invidiousCaptions[0] != "DEFAULT" || invidiousCaptions[2] != "DEFAULT") prefs.captions[1] = "";
+
+        if (invidiousCaptions[2] != "DEFAULT") prefs.captions[2] = invidiousCaptions[2];
+        else if (invidiousCaptions[0] != "DEFAULT" || invidiousCaptions[1] != "DEFAULT") prefs.captions[2] = "";
+
+        if (invidiousRelatedVideos != "DEFAULT") prefs.related_videos = invidiousRelatedVideos == 'true';
+        if (invidiousAnnotations != "DEFAULT") prefs.annotations = invidiousAnnotations == 'true';
+        if (invidiousExtendDesc != "DEFAULT") prefs.extend_desc = invidiousExtendDesc == 'true';
+        if (invidiousVrMode != "DEFAULT") prefs.vr_mode = invidiousVrMode == 'true';
+        if (invidiousSavePlayerPos != "DEFAULT") prefs.save_player_pos = invidiousSavePlayerPos == 'true';
+
+        if (volume != "--") prefs.volume = parseInt(volume);
+        if (invidiousPlayerStyle != "DEFAULT") prefs.player_style = invidiousPlayerStyle;
+        if (autoplay != "DEFAULT") prefs.autoplay = autoplay == 'true';
+
+        if (Object.entries(prefs).length !== 0)
+          browser.cookies.set({
+            url: instanceUrl,
+            name: "PREFS",
+            value: encodeURIComponent(JSON.stringify(prefs))
+          })
       })
-
-  for (const instanceUrl of checkedInstances)
-    browser.cookies.set({
-      url: instanceUrl,
-      name: "PREFS",
-      value: encodeURIComponent(JSON.stringify(prefs))
-    })
 }
 
 async function init() {
-  return new Promise((resolve) => {
-    fetch('/instances/data.json').then(response => response.text()).then(data => {
-      let dataJson = JSON.parse(data);
-      browser.storage.local.get(
-        [
-          "invidiousAlwaysProxy",
-          "invidiousVideoQuality",
-          "theme",
-          "applyThemeToSites",
-          "persistInvidiousPrefs",
-          "disableYoutube",
-          "OnlyEmbeddedVideo",
-          "youtubeVolume",
-          "invidiousPlayerStyle",
-          "invidiousSubtitles",
-          "youtubeAutoplay",
-          "youtubeRedirects",
-          "youtubeFrontend",
-
-          "invidiousNormalRedirectsChecks",
-          "invidiousNormalCustomRedirects",
+  await invidiousInit();
+  return new Promise(
+    resolve => {
+      fetch('/instances/data.json').then(response => response.text()).then(data => {
+        let dataJson = JSON.parse(data);
+        browser.storage.local.get(
+          [
+            "theme",
+            "applyThemeToSites",
+            "disableYoutube",
+            "OnlyEmbeddedVideo",
+            "youtubeVolume",
+            "youtubeAutoplay",
+            "youtubeRedirects",
+            "youtubeFrontend",
 
-          "invidiousTorRedirectsChecks",
-          "invidiousTorCustomRedirects",
+            "invidiousNormalRedirectsChecks",
+            "invidiousNormalCustomRedirects",
 
-          "pipedNormalRedirectsChecks",
-          "pipedNormalCustomRedirects",
+            "invidiousTorRedirectsChecks",
+            "invidiousTorCustomRedirects",
 
-          "pipedMaterialNormalRedirectsChecks",
-          "pipedMaterialNormalCustomRedirects",
+            "pipedNormalRedirectsChecks",
+            "pipedNormalCustomRedirects",
 
-          "pipedMaterialTorRedirectsChecks",
-          "pipedMaterialTorCustomRedirects",
+            "pipedMaterialNormalRedirectsChecks",
+            "pipedMaterialNormalCustomRedirects",
 
-          "pipedTorRedirectsChecks",
-          "pipedTorCustomRedirects",
-          "alwaysUsePreferred",
-          "youtubeEmbedFrontend",
+            "pipedMaterialTorRedirectsChecks",
+            "pipedMaterialTorCustomRedirects",
 
-          "youtubeProtocol",
+            "pipedTorRedirectsChecks",
+            "pipedTorCustomRedirects",
+            "alwaysUsePreferred",
+            "youtubeEmbedFrontend",
 
-          "youtubeEmbedExceptions",
-          "bypassWatchOnYoutube"
-        ],
-        r => { // r = result
-          redirects.invidious = dataJson.invidious;
-          if (r.youtubeRedirects) redirects = r.youtubeRedirects;
+            "youtubeProtocol",
 
-          disable = r.disableYoutube ?? false;
-          protocol = r.youtubeProtocol ?? 'normal';
-          frontend = r.youtubeFrontend ?? 'invidious';
-          youtubeEmbedFrontend = r.youtubeEmbedFrontend ?? 'invidious';
+            "youtubeEmbedExceptions",
+            "bypassWatchOnYoutube"
+          ],
+          r => { // r = result
+            redirects.invidious = dataJson.invidious;
+            if (r.youtubeRedirects) redirects = r.youtubeRedirects;
 
-          theme = r.theme ?? 'DEFAULT';
-          applyThemeToSites = r.applyThemeToSites ?? false;
+            disable = r.disableYoutube ?? false;
+            protocol = r.youtubeProtocol ?? 'normal';
+            frontend = r.youtubeFrontend ?? 'invidious';
+            youtubeEmbedFrontend = r.youtubeEmbedFrontend ?? 'invidious';
 
-          volume = r.youtubeVolume ?? '--';
-          autoplay = r.youtubeAutoplay ?? 'DEFAULT';
+            theme = r.theme ?? 'DEFAULT';
+            applyThemeToSites = r.applyThemeToSites ?? false;
 
-          invidiousAlwaysProxy = r.invidiousAlwaysProxy ?? 'DEFAULT';
-          OnlyEmbeddedVideo = r.OnlyEmbeddedVideo ?? 'both';
-          invidiousVideoQuality = r.invidiousVideoQuality ?? 'DEFAULT';
-          invidiousPlayerStyle = r.invidiousPlayerStyle ?? 'DEFAULT';
-          invidiousSubtitles = r.invidiousSubtitles || '';
+            volume = r.youtubeVolume ?? '--';
+            autoplay = r.youtubeAutoplay ?? 'DEFAULT';
 
-          invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks ?? [...redirects.invidious.normal];
-          invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects ?? [];
+            OnlyEmbeddedVideo = r.OnlyEmbeddedVideo ?? 'both';
 
-          invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks ?? [...redirects.invidious.tor];
-          invidiousTorCustomRedirects = r.invidiousTorCustomRedirects ?? [];
+            invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks ?? [...redirects.invidious.normal];
+            invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects ?? [];
 
-          pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks ?? [...redirects.piped.normal];
-          pipedNormalCustomRedirects = r.pipedNormalCustomRedirects ?? [];
+            invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks ?? [...redirects.invidious.tor];
+            invidiousTorCustomRedirects = r.invidiousTorCustomRedirects ?? [];
 
-          pipedTorRedirectsChecks = r.pipedTorRedirectsChecks ?? [...redirects.piped.tor];
-          pipedTorCustomRedirects = r.pipedTorCustomRedirects ?? [];
+            pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks ?? [...redirects.piped.normal];
+            pipedNormalCustomRedirects = r.pipedNormalCustomRedirects ?? [];
 
+            pipedTorRedirectsChecks = r.pipedTorRedirectsChecks ?? [...redirects.piped.tor];
+            pipedTorCustomRedirects = r.pipedTorCustomRedirects ?? [];
 
-          pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks ?? [...redirects.pipedMaterial.normal];
-          pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects ?? [];
+            pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks ?? [...redirects.pipedMaterial.normal];
+            pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects ?? [];
 
-          pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks ?? [...redirects.pipedMaterial.tor];
-          pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects ?? [];
+            pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks ?? [...redirects.pipedMaterial.tor];
+            pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects ?? [];
 
-          persistInvidiousPrefs = r.persistInvidiousPrefs ?? false;
+            alwaysUsePreferred = r.alwaysUsePreferred ?? false;
 
-          alwaysUsePreferred = r.alwaysUsePreferred ?? false;
+            bypassWatchOnYoutube = r.bypassWatchOnYoutube ?? true;
 
-          bypassWatchOnYoutube = r.bypassWatchOnYoutube ?? true;
+            if (r.youtubeEmbedExceptions) exceptions = r.youtubeEmbedExceptions;
 
-          if (r.youtubeEmbedExceptions) exceptions = r.youtubeEmbedExceptions;
+            initInvidiousCookies();
+            resolve();
 
-          initInvidiousCookies();
-
-          resolve();
-        });
-    });
-  })
+          });
+      });
+    })
 }
 
 export default {
   getBypassWatchOnYoutube,
   setBypassWatchOnYoutube,
-  initInvidiousCookies,
+
   initPipedLocalStorage,
   initPipedMaterialLocalStorage,
 
@@ -719,38 +753,70 @@ export default {
 
   isPipedorInvidious,
 
+  initInvidiousCookies,
+
+  setInvidiousAlwaysProxy,
+  getInvidiousAlwaysProxy,
+
+  setinvidiousQuality,
+  getinvidiousQuality,
+
+  setInvidiousPlayerStyle,
+  getInvidiousPlayerStyle,
+
+  getInvidiousVideoLoop,
+  setInvidiousVideoLoop,
+
   getDisable,
   setDisable,
 
   getProtocol,
   setProtocol,
 
-  setInvidiousAlwaysProxy,
-  getInvidiousAlwaysProxy,
-
   setOnlyEmbeddedVideo,
   getOnlyEmbeddedVideo,
 
-  setInvidiousVideoQuality,
-  getInvidiousVideoQuality,
-
-  setTheme,
-  getTheme,
-
   setVolume,
   getVolume,
 
-  setInvidiousPlayerStyle,
-  getInvidiousPlayerStyle,
-
-  setInvidiousSubtitles,
-  getInvidiousSubtitles,
-
   setAutoplay,
   getAutoplay,
 
-  getPersistInvidiousPrefs,
-  setPersistInvidiousPrefs,
+  getInvidiousContinueAutoplay,
+  setInvidiousContinueAutoplay,
+
+  getInvidiousContinue,
+  setInvidiousContinue,
+
+  getInvidiousListen,
+  setInvidiousListen,
+
+  getInvidiousSpeed,
+  setInvidiousSpeed,
+
+  getInvidiousQualityDash,
+  setInvidiousQualityDash,
+
+  getInvidiousComments,
+  setInvidiousComments,
+
+  getInvidiousCaptions,
+  setInvidiousCaptions,
+
+  getInvidiousRelatedVideos,
+  setInvidiousRelatedVideos,
+
+  getInvidiousAnnotations,
+  setInvidiousAnnotations,
+
+  getInvidiousExtendDesc,
+  setInvidiousExtendDesc,
+
+  getInvidiousVrMode,
+  setInvidiousVrMode,
+
+  getInvidiousSavePlayerPos,
+  setInvidiousSavePlayerPos,
 
   getInvidiousNormalRedirectsChecks,
   setInvidiousNormalRedirectsChecks,