aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets/javascripts/youtube
diff options
context:
space:
mode:
authorHygna <hygna@proton.me>2022-09-29 18:32:03 +0100
committerHygna <hygna@proton.me>2022-09-29 18:32:03 +0100
commitf1b8b64c48fede90ee9c828c1b82e641c0fe653d (patch)
tree44b55dfde203a223d57e6dcfd717dad7614e3b54 /src/assets/javascripts/youtube
parentUnify cookies (diff)
downloadlibredirect-f1b8b64c48fede90ee9c828c1b82e641c0fe653d.zip
Changes:
Improved instance fetcher Added instance updating Fix a few bugs
Diffstat (limited to 'src/assets/javascripts/youtube')
-rw-r--r--src/assets/javascripts/youtube/get_pipedMaterial_preferences.js5
-rw-r--r--src/assets/javascripts/youtube/get_piped_preferences.js22
-rw-r--r--src/assets/javascripts/youtube/set_pipedMaterial_preferences.js7
-rw-r--r--src/assets/javascripts/youtube/set_piped_preferences.js45
-rw-r--r--src/assets/javascripts/youtube/youtube.js792
5 files changed, 0 insertions, 871 deletions
diff --git a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js
deleted file mode 100644
index df79e13c..00000000
--- a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js
+++ /dev/null
@@ -1,5 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.set({
- pipedMaterial_PREFERENCES: localStorage.getItem("PREFERENCES"),
-})
diff --git a/src/assets/javascripts/youtube/get_piped_preferences.js b/src/assets/javascripts/youtube/get_piped_preferences.js
deleted file mode 100644
index 388ecd19..00000000
--- a/src/assets/javascripts/youtube/get_piped_preferences.js
+++ /dev/null
@@ -1,22 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.set({
- piped_bufferGoal: localStorage.getItem("bufferGoal"),
- piped_comments: localStorage.getItem("comments"),
- piped_disableLBRY: localStorage.getItem("disableLBRY"),
- piped_enabledCodecs: localStorage.getItem("enabledCodecs"),
- piped_hl: localStorage.getItem("hl"),
- piped_homepage: localStorage.getItem("homepage"),
- piped_instance: localStorage.getItem("instance"),
- piped_listen: localStorage.getItem("listen"),
- piped_minimizeDescription: localStorage.getItem("minimizeDescription"),
- piped_playerAutoPlay: localStorage.getItem("playerAutoPlay"),
- piped_proxyLBRY: localStorage.getItem("proxyLBRY"),
- piped_quality: localStorage.getItem("quality"),
- piped_region: localStorage.getItem("region"),
- piped_selectedSkip: localStorage.getItem("selectedSkip"),
- piped_sponsorblock: localStorage.getItem("sponsorblock"),
- piped_theme: localStorage.getItem("theme"),
- piped_volume: localStorage.getItem("volume"),
- piped_watchHistory: localStorage.getItem("watchHistory"),
-})
diff --git a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js
deleted file mode 100644
index 59d6dcc4..00000000
--- a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js
+++ /dev/null
@@ -1,7 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.get("pipedMaterial_PREFERENCES", r => {
- if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES)
-
- window.close()
-})
diff --git a/src/assets/javascripts/youtube/set_piped_preferences.js b/src/assets/javascripts/youtube/set_piped_preferences.js
deleted file mode 100644
index 374f2d61..00000000
--- a/src/assets/javascripts/youtube/set_piped_preferences.js
+++ /dev/null
@@ -1,45 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.get(
- [
- "piped_bufferGoal",
- "piped_comments",
- "piped_disableLBRY",
- "piped_enabledCodecs",
- "piped_homepage",
- "piped_instance",
- "piped_listen",
- "piped_minimizeDescription",
- "piped_playerAutoPlay",
- "piped_proxyLBRY",
- "piped_quality",
- "piped_region",
- "piped_selectedSkip",
- "piped_sponsorblock",
- "piped_theme",
- "piped_volume",
- "piped_watchHistory",
- ],
- r => {
- if (r.piped_bufferGoal !== undefined) localStorage.setItem("bufferGoal", r.piped_bufferGoal)
- if (r.piped_comments !== undefined) localStorage.setItem("comments", r.piped_comments)
- if (r.piped_disableLBRY !== undefined) localStorage.setItem("disableLBRY", r.piped_disableLBRY)
- if (r.piped_hl !== undefined) localStorage.setItem("hl", r.piped_hl)
- if (r.piped_enabledCodecs !== undefined) localStorage.setItem("enabledCodecs", r.piped_enabledCodecs)
- if (r.piped_homepage !== undefined) localStorage.setItem("homepage", r.piped_homepage)
- if (r.piped_instance !== undefined) localStorage.setItem("instance", r.piped_instance)
- if (r.piped_listen !== undefined) localStorage.setItem("listen", r.piped_listen)
- if (r.piped_minimizeDescription !== undefined) localStorage.setItem("minimizeDescription", r.piped_minimizeDescription)
- if (r.piped_playerAutoPlay !== undefined) localStorage.setItem("playerAutoPlay", r.piped_playerAutoPlay)
- if (r.piped_proxyLBRY !== undefined) localStorage.setItem("proxyLBRY", r.piped_proxyLBRY)
- if (r.piped_quality !== undefined) localStorage.setItem("quality", r.piped_quality)
- if (r.piped_region !== undefined) localStorage.setItem("region", r.piped_region)
- if (r.piped_selectedSkip !== undefined) localStorage.setItem("selectedSkip", r.piped_selectedSkip)
- if (r.piped_sponsorblock !== undefined) localStorage.setItem("sponsorblock", r.piped_sponsorblock)
- if (r.piped_theme !== undefined) localStorage.setItem("theme", r.piped_theme)
- if (r.piped_volume !== undefined) localStorage.setItem("volume", r.piped_volume)
- if (r.piped_watchHistory !== undefined) localStorage.setItem("watchHistory", r.piped_watchHistory)
-
- window.close()
- }
-)
diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js
deleted file mode 100644
index 32f06b9c..00000000
--- a/src/assets/javascripts/youtube/youtube.js
+++ /dev/null
@@ -1,792 +0,0 @@
-"use strict"
-
-window.browser = window.browser || window.chrome
-
-import utils from "../utils.js"
-
-const targets = [
- /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/,
-
- /^https?:\/{2}img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api
- /^https?:\/{2}(i|s)\.ytimg\.com\/vi\/.*\/..*/,
-
- /^https?:\/{2}(www\.|music\.|)youtube\.com\/watch\?v\=..*/,
-
- /^https?:\/{2}youtu\.be\/..*/,
-
- /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/,
-]
-
-const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube")
-const protocols = new Array("normal", "tor", "i2p", "loki")
-
-let redirects = {}
-
-for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = {}
- for (let x = 0; x < protocols.length; x++) {
- redirects[frontends[i]][protocols[x]] = []
- }
-}
-
-function setRedirects(val) {
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects = val
- invidiousNormalRedirectsChecks = [...redirects.invidious.normal]
- pipedNormalRedirectsChecks = [...redirects.piped.normal]
- pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]
- cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = invidiousNormalRedirectsChecks.indexOf(instance)
- if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1)
-
- const b = pipedNormalRedirectsChecks.indexOf(instance)
- if (b > -1) pipedNormalRedirectsChecks.splice(b, 1)
-
- const c = pipedMaterialNormalRedirectsChecks.indexOf(instance)
- if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1)
-
- const d = cloudtubeNormalRedirectsChecks.indexOf(instance)
- if (c > -1) cloudtubeNormalRedirectsChecks.splice(d, 1)
- }
- browser.storage.local.set({
- youtubeRedirects: redirects,
- invidiousNormalRedirectsChecks,
- invidiousTorRedirectsChecks: [...redirects.invidious.tor],
- invidiousI2pRedirectsChecks: [...redirects.invidious.i2p],
- invidiousLokiRedirectsChecks: [...redirects.invidious.loki],
- pipedNormalRedirectsChecks,
- pipedTorRedirectsChecks: [...redirects.piped.tor],
- pipedI2pRedirectsChecks: [...redirects.piped.i2p],
- pipedLokiRedirectsChecks: [...redirects.piped.loki],
- pipedMaterialNormalRedirectsChecks,
- pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
- pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p],
- pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki],
- cloudtubeNormalRedirectsChecks,
- cloudtubeTorRedirectsChecks: [...redirects.cloudtube.tor],
- cloudtubeI2pRedirectsChecks: [...redirects.cloudtube.i2p],
- cloudtubeLokiRedirectsChecks: [...redirects.cloudtube.loki],
- })
- })
-}
-
-let disableYoutube,
- onlyEmbeddedVideo,
- youtubeFrontend,
- protocol,
- protocolFallback,
- youtubeEmbedFrontend,
- youtubeRedirects,
- invidiousNormalRedirectsChecks,
- invidiousNormalCustomRedirects,
- invidiousTorRedirectsChecks,
- invidiousTorCustomRedirects,
- invidiousI2pRedirectsChecks,
- invidiousI2pCustomRedirects,
- invidiousLokiRedirectsChecks,
- invidiousLokiCustomRedirects,
- pipedNormalRedirectsChecks,
- pipedNormalCustomRedirects,
- pipedTorRedirectsChecks,
- pipedTorCustomRedirects,
- pipedI2pRedirectsChecks,
- pipedI2pCustomRedirects,
- pipedLokiRedirectsChecks,
- pipedLokiCustomRedirects,
- pipedMaterialNormalRedirectsChecks,
- pipedMaterialNormalCustomRedirects,
- pipedMaterialTorRedirectsChecks,
- pipedMaterialTorCustomRedirects,
- pipedMaterialI2pRedirectsChecks,
- pipedMaterialI2pCustomRedirects,
- pipedMaterialLokiRedirectsChecks,
- pipedMaterialLokiCustomRedirects,
- cloudtubeNormalRedirectsChecks,
- cloudtubeNormalCustomRedirects,
- cloudtubeTorRedirectsChecks,
- cloudtubeTorCustomRedirects,
- cloudtubeI2pRedirectsChecks,
- cloudtubeI2pCustomRedirects,
- cloudtubeLokiRedirectsChecks,
- cloudtubeLokiCustomRedirects
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableYoutube",
- "onlyEmbeddedVideo",
- "youtubeFrontend",
- "protocol",
- "protocolFallback",
- "youtubeEmbedFrontend",
- "youtubeRedirects",
- "invidiousNormalRedirectsChecks",
- "invidiousNormalCustomRedirects",
- "invidiousTorRedirectsChecks",
- "invidiousTorCustomRedirects",
- "invidiousI2pRedirectsChecks",
- "invidiousI2pCustomRedirects",
- "invidiousLokiRedirectsChecks",
- "invidiousLokiCustomRedirects",
- "pipedNormalRedirectsChecks",
- "pipedNormalCustomRedirects",
- "pipedTorRedirectsChecks",
- "pipedTorCustomRedirects",
- "pipedI2pRedirectsChecks",
- "pipedI2pCustomRedirects",
- "pipedLokiRedirectsChecks",
- "pipedLokiCustomRedirects",
- "pipedMaterialNormalRedirectsChecks",
- "pipedMaterialNormalCustomRedirects",
- "pipedMaterialTorRedirectsChecks",
- "pipedMaterialTorCustomRedirects",
- "pipedMaterialI2pRedirectsChecks",
- "pipedMaterialI2pCustomRedirects",
- "pipedMaterialLokiRedirectsChecks",
- "pipedMaterialLokiCustomRedirects",
- "cloudtubeNormalRedirectsChecks",
- "cloudtubeNormalCustomRedirects",
- "cloudtubeTorRedirectsChecks",
- "cloudtubeTorCustomRedirects",
- "cloudtubeI2pRedirectsChecks",
- "cloudtubeI2pCustomRedirects",
- "cloudtubeLokiRedirectsChecks",
- "cloudtubeLokiCustomRedirects",
- ],
- r => {
- disableYoutube = r.disableYoutube
- onlyEmbeddedVideo = r.onlyEmbeddedVideo
- youtubeFrontend = r.youtubeFrontend
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- youtubeEmbedFrontend = r.youtubeEmbedFrontend
- youtubeRedirects = r.youtubeRedirects
- invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks
- invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects
- invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks
- invidiousTorCustomRedirects = r.invidiousTorCustomRedirects
- invidiousI2pRedirectsChecks = r.invidiousI2pRedirectsChecks
- invidiousI2pCustomRedirects = r.invidiousI2pCustomRedirects
- invidiousLokiRedirectsChecks = r.invidiousLokiRedirectsChecks
- invidiousLokiCustomRedirects = r.invidiousLokiCustomRedirects
- pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks
- pipedNormalCustomRedirects = r.pipedNormalCustomRedirects
- pipedTorRedirectsChecks = r.pipedTorRedirectsChecks
- pipedTorCustomRedirects = r.pipedTorCustomRedirects
- pipedI2pRedirectsChecks = r.pipedI2pRedirectsChecks
- pipedI2pCustomRedirects = r.pipedI2pCustomRedirects
- pipedLokiRedirectsChecks = r.pipedLokiRedirectsChecks
- pipedLokiCustomRedirects = r.pipedLokiCustomRedirects
- pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks
- pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects
- pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks
- pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects
- pipedMaterialI2pRedirectsChecks = r.pipedMaterialI2pRedirectsChecks
- pipedMaterialI2pCustomRedirects = r.pipedMaterialI2pCustomRedirects
- pipedMaterialLokiRedirectsChecks = r.pipedMaterialLokiRedirectsChecks
- pipedMaterialLokiCustomRedirects = r.pipedMaterialLokiCustomRedirects
- cloudtubeNormalRedirectsChecks = r.cloudtubeNormalRedirectsChecks
- cloudtubeNormalCustomRedirects = r.cloudtubeNormalCustomRedirects
- cloudtubeTorRedirectsChecks = r.cloudtubeTorRedirectsChecks
- cloudtubeTorCustomRedirects = r.cloudtubeTorCustomRedirects
- cloudtubeI2pRedirectsChecks = r.cloudtubeI2pRedirectsChecks
- cloudtubeI2pCustomRedirects = r.cloudtubeI2pCustomRedirects
- cloudtubeLokiRedirectsChecks = r.cloudtubeLokiRedirectsChecks
- cloudtubeLokiCustomRedirects = r.cloudtubeLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
- return [
- ...youtubeRedirects.invidious.normal,
- ...youtubeRedirects.invidious.tor,
- ...youtubeRedirects.invidious.i2p,
- ...youtubeRedirects.invidious.loki,
-
- ...youtubeRedirects.piped.normal,
- ...youtubeRedirects.piped.tor,
- ...youtubeRedirects.piped.i2p,
- ...youtubeRedirects.piped.loki,
-
- ...youtubeRedirects.pipedMaterial.normal,
- ...youtubeRedirects.pipedMaterial.tor,
- ...youtubeRedirects.pipedMaterial.i2p,
- ...youtubeRedirects.pipedMaterial.loki,
-
- ...youtubeRedirects.cloudtube.normal,
- ...youtubeRedirects.cloudtube.tor,
- ...youtubeRedirects.cloudtube.i2p,
- ...youtubeRedirects.cloudtube.loki,
-
- ...invidiousNormalCustomRedirects,
- ...invidiousTorCustomRedirects,
- ...invidiousI2pCustomRedirects,
- ...invidiousLokiCustomRedirects,
-
- ...pipedNormalCustomRedirects,
- ...pipedTorCustomRedirects,
- ...pipedI2pCustomRedirects,
- ...pipedLokiCustomRedirects,
-
- ...pipedMaterialNormalCustomRedirects,
- ...pipedMaterialTorCustomRedirects,
- ...pipedMaterialI2pCustomRedirects,
- ...pipedMaterialLokiCustomRedirects,
-
- ...cloudtubeNormalCustomRedirects,
- ...cloudtubeTorCustomRedirects,
- ...cloudtubeI2pCustomRedirects,
- ...cloudtubeLokiCustomRedirects,
- ]
-}
-
-function calculateFrontend(type) {
- switch (type) {
- case "main_frame":
- return youtubeFrontend
- case "sub_frame":
- return youtubeEmbedFrontend
- }
-}
-
-function getInstanceList(type) {
- let instancesList = []
- switch (calculateFrontend(type)) {
- case "invidious":
- switch (protocol) {
- case "loki":
- instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
- break
- case "i2p":
- instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
- break
- case "tor":
- instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
- }
- break
- case "piped":
- switch (protocol) {
- case "loki":
- instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
- break
- case "i2p":
- instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
- break
- case "tor":
- instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
- }
- break
- case "pipedMaterial":
- switch (protocol) {
- case "loki":
- instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
- break
- case "i2p":
- instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
- break
- case "tor":
- instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
- }
- case "cloudtube":
- switch (protocol) {
- case "loki":
- instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
- break
- case "i2p":
- instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
- break
- case "tor":
- instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
- }
- }
- return instancesList
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableYoutube && !disableOverride) return
- if (!targets.some(rx => rx.test(url.href))) return
- if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
-
- if (type != ("main_frame" || "sub_frame")) return
- if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return // Don't redirect YouTube Player API.
- if (onlyEmbeddedVideo == "onlyEmbedded" && type == "main_frame") return
- if (onlyEmbeddedVideo == "onlyNotEmbedded" && type == "sub_frame") return
-
- if (type == "main_frame") {
- switch (youtubeFrontend) {
- case "yatte":
- return url.href.replace(/^https?:\/{2}/, "yattee://")
- case "freetube":
- return `freetube://https://youtube.com${url.pathname}${url.search}`
- }
- }
-
- const instanceList = getInstanceList(type)
- try {
- if (instanceList.length >= 1) {
- const randomInstance = utils.getRandomInstance(instanceList)
- return `${randomInstance}${url.pathname}${url.search}`
- }
- } catch {
- return
- }
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- resolve(`https://youtube.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableYoutube && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- switch (protocol) {
- case "loki":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
- }
- break
- case "i2p":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
- }
- break
- case "tor":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
- }
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
- }
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length == 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- invidiousNormalRedirectsChecks = [...redirects.invidious.normal]
- pipedNormalRedirectsChecks = [...redirects.piped.normal]
- pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]
- cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = invidiousNormalRedirectsChecks.indexOf(instance)
- if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1)
-
- const b = pipedNormalRedirectsChecks.indexOf(instance)
- if (b > -1) pipedNormalRedirectsChecks.splice(b, 1)
-
- const c = pipedMaterialNormalRedirectsChecks.indexOf(instance)
- if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1)
-
- const d = cloudtubeNormalRedirectsChecks.indexOf(instance)
- if (c > -1) cloudtubeNormalRedirectsChecks.splice(d, 1)
- }
- browser.storage.local.set(
- {
- disableYoutube: false,
- enableYoutubeCustomSettings: false,
- onlyEmbeddedVideo: "both",
- youtubeRedirects: redirects,
- youtubeFrontend: "invidious",
-
- invidiousNormalRedirectsChecks,
- invidiousNormalCustomRedirects: [],
-
- invidiousTorRedirectsChecks: [...redirects.invidious.tor],
- invidiousTorCustomRedirects: [],
-
- invidiousI2pRedirectsChecks: [...redirects.invidious.i2p],
- invidiousI2pCustomRedirects: [],
-
- invidiousLokiRedirectsChecks: [...redirects.invidious.loki],
- invidiousLokiCustomRedirects: [],
-
- pipedNormalRedirectsChecks,
- pipedNormalCustomRedirects: [],
-
- pipedTorRedirectsChecks: [...redirects.piped.tor],
- pipedTorCustomRedirects: [],
-
- pipedI2pRedirectsChecks: [...redirects.piped.i2p],
- pipedI2pCustomRedirects: [],
-
- pipedLokiRedirectsChecks: [...redirects.piped.loki],
- pipedLokiCustomRedirects: [],
-
- pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks,
- pipedMaterialNormalCustomRedirects: [],
-
- pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
- pipedMaterialTorCustomRedirects: [],
-
- pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p],
- pipedMaterialI2pCustomRedirects: [],
-
- pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki],
- pipedMaterialLokiCustomRedirects: [],
-
- cloudtubeNormalRedirectsChecks: cloudtubeNormalRedirectsChecks,
- cloudtubeNormalCustomRedirects: [],
-
- cloudtubeTorRedirectsChecks: [...redirects.cloudtube.tor],
- cloudtubeTorCustomRedirects: [],
-
- cloudtubeI2pRedirectsChecks: [...redirects.cloudtube.i2p],
- cloudtubeI2pCustomRedirects: [],
-
- cloudtubeLokiRedirectsChecks: [...redirects.cloudtube.loki],
- cloudtubeLokiCustomRedirects: [],
-
- youtubeEmbedFrontend: "invidious",
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-function copyPasteInvidiousCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- if (disableYoutube || youtubeFrontend != "invidious") {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(from)
- if (
- ![
- ...invidiousNormalRedirectsChecks,
- ...invidiousTorRedirectsChecks,
- ...invidiousNormalCustomRedirects,
- ...invidiousTorCustomRedirects,
- ...invidiousI2pCustomRedirects,
- ...invidiousLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
- if (!test) {
- let checkedInstances = []
-
- if (protocol == "loki") checkedInstances = [...invidiousLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...invidiousI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
- }
- const i = checkedInstances.indexOf(protocolHost)
- if (i !== -1) checkedInstances.splice(i, 1)
- await utils.copyCookie("invidious", from, checkedInstances, "PREFS")
- }
- resolve(true)
- })
-}
-
-function copyPastePipedLocalStorage(test, url, tabId) {
- return new Promise(async resolve => {
- await init()
- if (disableYoutube || youtubeFrontend != "piped") {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (
- ![...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks, ...pipedTorRedirectsChecks, ...pipedTorCustomRedirects, ...pipedI2pCustomRedirects, ...pipedLokiCustomRedirects].includes(
- protocolHost
- )
- ) {
- resolve()
- return
- }
-
- if (!test) {
- browser.tabs.executeScript(tabId, {
- file: "/assets/javascripts/youtube/get_piped_preferences.js",
- runAt: "document_start",
- })
-
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...pipedLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...pipedI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks]
- }
- const i = checkedInstances.indexOf(protocolHost)
- if (i !== -1) checkedInstances.splice(i, 1)
- for (const to of checkedInstances) {
- browser.tabs.create({ url: to }, tab =>
- browser.tabs.executeScript(tab.id, {
- file: "/assets/javascripts/youtube/set_piped_preferences.js",
- runAt: "document_start",
- })
- )
- }
- }
- resolve(true)
- })
-}
-
-function copyPastePipedMaterialLocalStorage(test, url, tabId) {
- return new Promise(async resolve => {
- await init()
- if (disableYoutube || youtubeFrontend != "pipedMaterial") {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (
- ![
- ...pipedMaterialNormalRedirectsChecks,
- ...pipedMaterialNormalCustomRedirects,
- //...pipedMaterialTorRedirectsChecks,
- ...pipedMaterialTorCustomRedirects,
- ...pipedMaterialI2pCustomRedirects,
- ...pipedMaterialLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- if (!test) {
- browser.tabs.executeScript(tabId, {
- file: "/assets/javascripts/youtube/get_pipedMaterial_preferences.js",
- runAt: "document_start",
- })
-
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...pipedMaterialLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...pipedMaterialI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...pipedMaterialTorCustomRedirects] //...pipedMaterialTorRedirectsChecks,
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
- }
- const i = checkedInstances.indexOf(protocolHost)
- if (i !== -1) checkedInstances.splice(i, 1)
- for (const to of checkedInstances)
- browser.tabs.create({ url: to }, tab =>
- browser.tabs.executeScript(tab.id, {
- file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js",
- runAt: "document_start",
- })
- )
- }
- resolve(true)
- })
-}
-
-function removeXFrameOptions(e) {
- let isChanged = false
-
- if (e.type == "main_frame") {
- for (const i in e.responseHeaders) {
- if (e.responseHeaders[i].name == "content-security-policy") {
- let instancesList = []
- switch (protocol) {
- case "loki":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
- }
- break
- case "i2p":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
- }
- break
- case "tor":
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
- }
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- switch (youtubeFrontend) {
- case "invidious":
- instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
- break
- case "piped":
- instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
- break
- case "pipedMaterial":
- instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
- break
- case "cloudtube":
- instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
- }
- }
- let securityPolicyList = e.responseHeaders[i].value.split(";")
- for (const i in securityPolicyList) securityPolicyList[i] = securityPolicyList[i].trim()
-
- let newSecurity = ""
- for (const item of securityPolicyList) {
- if (item.trim() == "") continue
- let regex = item.match(/([a-z-]{0,}) (.*)/)
- if (regex == null) continue
- let [, key, vals] = regex
- if (key == "frame-src") vals = vals + " " + instancesList.join(" ")
- newSecurity += key + " " + vals + "; "
- }
-
- e.responseHeaders[i].value = newSecurity
- isChanged = true
- }
- }
- } else if (e.type == "sub_frame") {
- const url = new URL(e.url)
- const protocolHost = utils.protocolHost(url)
- if (all().includes(protocolHost)) {
- for (const i in e.responseHeaders) {
- if (e.responseHeaders[i].name == "x-frame-options") {
- e.responseHeaders.splice(i, 1)
- isChanged = true
- } else if (e.responseHeaders[i].name == "content-security-policy") {
- e.responseHeaders.splice(i, 1)
- isChanged = true
- }
- }
- }
- }
- if (isChanged) return { responseHeaders: e.responseHeaders }
-}
-
-export default {
- setRedirects,
- copyPastePipedLocalStorage,
- copyPastePipedMaterialLocalStorage,
- copyPasteInvidiousCookies,
- redirect,
- reverse,
- switchInstance,
- initDefaults,
- removeXFrameOptions,
-}