diff options
author | BobIsMyManager <bimmgitsignature.nly8m@simplelogin.co> | 2022-07-26 22:28:50 +0100 |
---|---|---|
committer | BobIsMyManager <bimmgitsignature.nly8m@simplelogin.co> | 2022-07-26 22:28:50 +0100 |
commit | 2a0596f08fb54e2faef4bcb4548a28f5837fc067 (patch) | |
tree | cf5851f95c37da269a561623cee0d3967ca321ec /src/assets/javascripts/youtube | |
parent | I should really inspect diffs before commiting (diff) | |
download | libredirect-2a0596f08fb54e2faef4bcb4548a28f5837fc067.zip |
Many things
Made all instances updateable Added hyperpipe Closes https://github.com/libredirect/libredirect/issues/398 Added cloudtube Closes https://github.com/libredirect/libredirect/issues/397 Start using prettier
Diffstat (limited to 'src/assets/javascripts/youtube')
5 files changed, 851 insertions, 603 deletions
diff --git a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js index 9d052f62..df79e13c 100644 --- a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js +++ b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js @@ -1,7 +1,5 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.set( - { - 'pipedMaterial_PREFERENCES': localStorage.getItem("PREFERENCES") - } -) \ No newline at end of file +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 index 417d64df..388ecd19 100644 --- a/src/assets/javascripts/youtube/get_piped_preferences.js +++ b/src/assets/javascripts/youtube/get_piped_preferences.js @@ -1,24 +1,22 @@ -window.browser = window.browser || window.chrome; +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"), - } -) +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 index 7415255a..59d6dcc4 100644 --- a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js +++ b/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js @@ -1,10 +1,7 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.get( - "pipedMaterial_PREFERENCES", - r => { - if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES) +browser.storage.local.get("pipedMaterial_PREFERENCES", r => { + if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES) - window.close(); - } -) \ No newline at end of file + window.close() +}) diff --git a/src/assets/javascripts/youtube/set_piped_preferences.js b/src/assets/javascripts/youtube/set_piped_preferences.js index 346de5c2..374f2d61 100644 --- a/src/assets/javascripts/youtube/set_piped_preferences.js +++ b/src/assets/javascripts/youtube/set_piped_preferences.js @@ -1,45 +1,45 @@ -window.browser = window.browser || window.chrome; +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); + [ + "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(); - } -) \ No newline at end of file + window.close() + } +) diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js index 72763c46..e8a77ff6 100644 --- a/src/assets/javascripts/youtube/youtube.js +++ b/src/assets/javascripts/youtube/youtube.js @@ -1,601 +1,856 @@ -"use strict"; +"use strict" -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from '../utils.js' +import utils from "../utils.js" const targets = [ - /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/, + /^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}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}(www\.|music\.|)youtube\.com\/watch\?v\=..*/, - /^https?:\/{2}youtu\.be\/..*/, + /^https?:\/{2}youtu\.be\/..*/, - /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, -]; + /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, +] -const frontends = new Array("invidious", "piped", "pipedMaterial") +const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +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]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.invidious = val.invidious; - redirects.piped = val.piped; - redirects.pipedMaterial = val.pipedMaterial - invidiousNormalRedirectsChecks = [...redirects.invidious.normal]; - pipedNormalRedirectsChecks = [...redirects.piped.normal]; - pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] - for (const instance of r.cloudflareBlackList) { - 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); - } - browser.storage.local.set({ - youtubeRedirects: redirects, - invidiousNormalRedirectsChecks, - invidiousTorRedirectsChecks: redirects.invidious.tor, - pipedNormalRedirectsChecks, - pipedTorRedirectsChecks: redirects.piped.tor, - pipedMaterialNormalRedirectsChecks, - // pipedMaterialTorRedirectsChecks: redirects.pipedMaterial.tor - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + for (let i = 0; i < frontends.length; i++) { + redirects.frontends = val.frontends + } + invidiousNormalRedirectsChecks = [...redirects.invidious.normal] + pipedNormalRedirectsChecks = [...redirects.piped.normal] + pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] + for (const instance of r.cloudflareBlackList) { + 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, + pipedNormalRedirectsChecks, + pipedMaterialNormalRedirectsChecks, + cloudtubeNormalRedirectsChecks, + }) + }) } -let - disableYoutube, - onlyEmbeddedVideo, - youtubeFrontend, - protocol, - protocolFallback, - youtubeEmbedFrontend, - youtubeRedirects, - invidiousNormalRedirectsChecks, - invidiousNormalCustomRedirects, - invidiousTorRedirectsChecks, - invidiousTorCustomRedirects, - invidiousI2pCustomRedirects, - invidiousLokiCustomRedirects, - pipedNormalRedirectsChecks, - pipedNormalCustomRedirects, - pipedTorRedirectsChecks, - pipedTorCustomRedirects, - pipedI2pCustomRedirects, - pipedLokiCustomRedirects, - pipedMaterialNormalRedirectsChecks, - pipedMaterialNormalCustomRedirects, - pipedMaterialTorRedirectsChecks, - pipedMaterialTorCustomRedirects, - pipedMaterialI2pCustomRedirects, - pipedMaterialLokiCustomRedirects; +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", - "invidiousI2pCustomRedirects", - "invidiousLokiCustomRedirects", - "pipedNormalRedirectsChecks", - "pipedNormalCustomRedirects", - "pipedTorRedirectsChecks", - "pipedTorCustomRedirects", - "pipedI2pCustomRedirects", - "pipedLokiCustomRedirects", - "pipedMaterialNormalRedirectsChecks", - "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorRedirectsChecks", - "pipedMaterialTorCustomRedirects", - "pipedMaterialI2pCustomRedirects", - "pipedMaterialLokiCustomRedirects" - ], - 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; - invidiousI2pCustomRedirects = r.invidiousI2pCustomRedirects; - invidiousLokiCustomRedirects = r.invidiousLokiCustomRedirects; - pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks; - pipedNormalCustomRedirects = r.pipedNormalCustomRedirects; - pipedTorRedirectsChecks = r.pipedTorRedirectsChecks; - pipedTorCustomRedirects = r.pipedTorCustomRedirects; - pipedI2pCustomRedirects = r.pipedI2pCustomRedirects; - pipedLokiCustomRedirects = r.pipedLokiCustomRedirects; - pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks; - pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects; - pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks; - pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects; - pipedMaterialI2pCustomRedirects = r.pipedMaterialI2pCustomRedirects; - pipedMaterialLokiCustomRedirects = r.pipedMaterialLokiCustomRedirects; - resolve(); - } - ) - }) + 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(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...youtubeRedirects.invidious.normal, - ...youtubeRedirects.invidious.tor, - - ...youtubeRedirects.piped.normal, - ...youtubeRedirects.piped.tor, - - ...youtubeRedirects.pipedMaterial.normal, - ...youtubeRedirects.pipedMaterial.tor, - - ...invidiousNormalCustomRedirects, - ...invidiousTorCustomRedirects, - ...invidiousI2pCustomRedirects, - ...invidiousLokiCustomRedirects, - - ...pipedNormalCustomRedirects, - ...pipedTorCustomRedirects, - ...pipedI2pCustomRedirects, - ...pipedLokiCustomRedirects, - - ...pipedMaterialNormalCustomRedirects, - ...pipedMaterialTorCustomRedirects, - ...pipedMaterialI2pCustomRedirects, - ...pipedMaterialLokiCustomRedirects - ]; + 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'; - - const isInvidious = youtubeFrontend == 'invidious'; - const isPiped = youtubeFrontend == 'piped'; - const isPipedMaterial = youtubeFrontend == 'pipedMaterial' - const isFreetube = youtubeFrontend == 'freetube'; - const isYatte = youtubeFrontend == 'yatte'; - - //const isFrontendYoutube = youtubeEmbedFrontend == "youtube"; - const isFrontendInvidious = youtubeEmbedFrontend == 'invidious'; - const isFrontendPiped = youtubeEmbedFrontend == 'piped'; - const isFrontendPipedMaterial = youtubeEmbedFrontend == 'pipedMaterial'; - - const main_frame = type === "main_frame"; - const sub_frame = type === "sub_frame"; - - if (!sub_frame && !main_frame) return; - if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return; // Don't redirect YouTube Player API. - if (onlyEmbeddedVideo == 'onlyEmbedded' && main_frame) return; - if (onlyEmbeddedVideo == 'onlyNotEmbedded' && !main_frame) return; - - //if ((isFreetube || isYatte) && sub_frame && isFrontendYoutube) return; - - if (isYatte && main_frame) return url.href.replace(/^https?:\/{2}/, 'yattee://'); - if (isFreetube && main_frame) return `freetube://https://youtube.com${url.pathname}${url.search}`; - - if (isInvidious || ((isFreetube || isYatte) && sub_frame && isFrontendInvidious)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...invidiousLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...invidiousI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - if (isPiped || ((isFreetube || isYatte) && sub_frame && isFrontendPiped)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...pipedLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...pipedI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - if (isPipedMaterial || ((isFreetube || isYatte) && sub_frame && isFrontendPipedMaterial)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...pipedMaterialLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...pipedMaterialI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - return 'CANCEL'; + 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}`); - }) + 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 = []; - if (protocol == 'loki') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousLokiCustomRedirects]; //...invidiousLokiRedirectsChecks, - else if (youtubeFrontend == 'piped') instancesList = [...pipedLokiCustomRedirects]; //...pipedLokiRedirectsChecks, - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialLokiCustomRedirects]; //...pipedMaterialLokiRedirectsChecks, - } - else if (protocol == 'i2p') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousI2pCustomRedirects]; //...invidiousI2pRedirectsChecks, - else if (youtubeFrontend == 'piped') instancesList = [...pipedI2pCustomRedirects]; //...pipedI2pRedirectsChecks, - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialI2pCustomRedirects]; //...pipedMaterialI2pRedirectsChecks, - } - else if (protocol == 'tor') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - else if (youtubeFrontend == 'piped') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - else if (youtubeFrontend == 'piped') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - - 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}`); - }) + 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', async r => { + 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", async r => { + invidiousNormalRedirectsChecks = [...redirects.invidious.normal] + pipedNormalRedirectsChecks = [...redirects.piped.normal] + pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] + cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal] + + for (const instance of r.cloudflareBlackList) { + const a = invidiousNormalRedirectsChecks.indexOf(instance) + if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1) - invidiousNormalRedirectsChecks = [...redirects.invidious.normal]; - pipedNormalRedirectsChecks = [...redirects.piped.normal]; - pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]; + const b = pipedNormalRedirectsChecks.indexOf(instance) + if (b > -1) pipedNormalRedirectsChecks.splice(b, 1) - for (const instance of r.cloudflareBlackList) { - const a = invidiousNormalRedirectsChecks.indexOf(instance); - if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1); + const c = pipedMaterialNormalRedirectsChecks.indexOf(instance) + if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1) - const b = pipedNormalRedirectsChecks.indexOf(instance); - if (b > -1) pipedNormalRedirectsChecks.splice(b, 1); + const d = cloudtubeNormalRedirectsChecks.indexOf(instance) + if (d > -1) cloudtubeNormalRedirectsChecks.indexOf(instance) + } - const c = pipedMaterialNormalRedirectsChecks.indexOf(instance); - if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1); - } + browser.storage.local.set( + { + disableYoutube: false, + enableYoutubeCustomSettings: false, + onlyEmbeddedVideo: "both", + youtubeRedirects: redirects, + youtubeFrontend: "invidious", - browser.storage.local.set({ - disableYoutube: false, - enableYoutubeCustomSettings: false, - onlyEmbeddedVideo: 'both', - youtubeRedirects: redirects, - youtubeFrontend: 'invidious', + invidiousNormalRedirectsChecks: invidiousNormalRedirectsChecks, + invidiousNormalCustomRedirects: [], - invidiousNormalRedirectsChecks: invidiousNormalRedirectsChecks, - invidiousNormalCustomRedirects: [], + invidiousTorRedirectsChecks: [...redirects.invidious.tor], + invidiousTorCustomRedirects: [], - invidiousTorRedirectsChecks: [...redirects.invidious.tor], - invidiousTorCustomRedirects: [], + invidiousI2pRedirectsChecks: [...redirects.invidious.i2p], + invidiousI2pCustomRedirects: [], - invidiousI2pRedirectsChecks: [...redirects.invidious.i2p], - invidiousI2pCustomRedirects: [], + invidiousLokiRedirectsChecks: [...redirects.invidious.loki], + invidiousLokiCustomRedirects: [], - invidiousLokiRedirectsChecks: [...redirects.invidious.loki], - invidiousLokiCustomRedirects: [], + pipedNormalRedirectsChecks: pipedNormalRedirectsChecks, + pipedNormalCustomRedirects: [], - pipedNormalRedirectsChecks: pipedNormalRedirectsChecks, - pipedNormalCustomRedirects: [], + pipedTorRedirectsChecks: [...redirects.piped.tor], + pipedTorCustomRedirects: [], - pipedTorRedirectsChecks: [...redirects.piped.tor], - pipedTorCustomRedirects: [], + pipedI2pRedirectsChecks: [...redirects.piped.i2p], + pipedI2pCustomRedirects: [], - pipedI2pRedirectsChecks: [...redirects.piped.i2p], - pipedI2pCustomRedirects: [], + pipedLokiRedirectsChecks: [...redirects.piped.loki], + pipedLokiCustomRedirects: [], - pipedLokiRedirectsChecks: [...redirects.piped.loki], - pipedLokiCustomRedirects: [], + pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks, + pipedMaterialNormalCustomRedirects: [], - pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks, - pipedMaterialNormalCustomRedirects: [], + pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor], + pipedMaterialTorCustomRedirects: [], - pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor], - pipedMaterialTorCustomRedirects: [], + pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p], + pipedMaterialI2pCustomRedirects: [], - pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p], - pipedMaterialI2pCustomRedirects: [], + pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki], + pipedMaterialLokiCustomRedirects: [], - pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki], - pipedMaterialLokiCustomRedirects: [], + cloudtubeNormalRedirectsChecks: cloudtubeNormalRedirectsChecks, + cloudtubeNormalCustomRedirects: [], - youtubeEmbedFrontend: 'invidious' - }, () => resolve()) - }) - }) - }) + 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); - }) + 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 pasteInvidiousCookies() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'invidious') { resolve(); return; } - 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] - } - utils.getCookiesFromStorage('invidious', checkedInstances, 'PREFS'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "invidious") { + resolve() + return + } + 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] + } + utils.getCookiesFromStorage("invidious", checkedInstances, "PREFS") + resolve() + }) } 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 ((instancesList.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); - }) + 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 ((instancesList.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 pastePipedLocalStorage() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'piped') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...pipedLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...pipedI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] - } - 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(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "piped") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...pipedLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...pipedI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] + } + 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() + }) } -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 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 pastePipedMaterialLocalStorage() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'pipedMaterial') { resolve(); return; } - 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] - } - 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(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "pipedMaterial") { + resolve() + return + } + 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] + } + 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() + }) } 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 = []; - if (protocol == 'loki') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousLokiCustomRedirects]; //...invidiousLokiRedirectsChecks, - if (youtubeFrontend == 'piped') instancesList = [...pipedLokiCustomRedirects]; //...pipedLokiRedirectsChecks, - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialLokiCustomRedirects]; //...pipedMaterialLokiRedirectsChecks, - } - else if (protocol == 'i2p') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousI2pCustomRedirects]; //...invidiousI2pRedirectsChecks, - if (youtubeFrontend == 'piped') instancesList = [...pipedI2pCustomRedirects]; //...pipedI2pRedirectsChecks, - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialI2pCustomRedirects]; //...pipedMaterialI2pRedirectsChecks, - } - else if (protocol == 'tor') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if (youtubeFrontend == 'piped') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - if (youtubeFrontend == 'piped') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - 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 }; + 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, - pastePipedLocalStorage, - copyPastePipedMaterialLocalStorage, - pastePipedMaterialLocalStorage, - copyPasteInvidiousCookies, - pasteInvidiousCookies, - redirect, - reverse, - switchInstance, - initDefaults, - removeXFrameOptions, -}; + setRedirects, + copyPastePipedLocalStorage, + pastePipedLocalStorage, + copyPastePipedMaterialLocalStorage, + pastePipedMaterialLocalStorage, + copyPasteInvidiousCookies, + pasteInvidiousCookies, + redirect, + reverse, + switchInstance, + initDefaults, + removeXFrameOptions, +} |