diff options
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r-- | src/assets/javascripts/lbry.js | 70 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 96 |
2 files changed, 93 insertions, 73 deletions
diff --git a/src/assets/javascripts/lbry.js b/src/assets/javascripts/lbry.js index f0698d36..0c4d34cc 100644 --- a/src/assets/javascripts/lbry.js +++ b/src/assets/javascripts/lbry.js @@ -2,7 +2,7 @@ window.browser = window.browser || window.chrome import utils from "./utils.js" -let targets = ["odysee.com"] +const targets = [/^https?:\/{2}odysee\.com/] const frontends = new Array("librarian") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -36,6 +36,7 @@ let disableLbryTargets, protocol, protocolFallback, lbryTargetsRedirects, + lbryRedirectType, librarianNormalRedirectsChecks, librarianNormalCustomRedirects, librarianTorRedirectsChecks, @@ -53,6 +54,7 @@ function init() { "protocol", "protocolFallback", "lbryTargetsRedirects", + "lbryRedirectType", "librarianNormalRedirectsChecks", "librarianNormalCustomRedirects", "librarianTorRedirectsChecks", @@ -67,6 +69,7 @@ function init() { protocol = r.protocol protocolFallback = r.protocolFallback lbryTargetsRedirects = r.lbryTargetsRedirects + lbryRedirectType = r.lbryRedirectType librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks librarianNormalCustomRedirects = r.librarianNormalCustomRedirects librarianTorRedirectsChecks = r.librarianTorRedirectsChecks @@ -86,6 +89,24 @@ function all() { return [...redirects.librarian.normal, ...redirects.librarian.tor, ...librarianNormalCustomRedirects, ...librarianTorCustomRedirects, ...librarianI2pCustomRedirects, ...librarianLokiCustomRedirects] } +function getInstancesList() { + let tmpList = [] + switch (protocol) { + case "loki": + tmpList = [...librarianLokiCustomRedirects] + break + case "i2p": + tmpList = [...librarianI2pRedirectsChecks, ...librarianI2pCustomRedirects] + break + case "tor": + tmpList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects] + } + if ((tmpList.length === 0 && protocolFallback) || protocol == "normal") { + tmpList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects] + } + return tmpList +} + function switchInstance(url, disableOverride) { return new Promise(async resolve => { await init() @@ -122,37 +143,27 @@ function switchInstance(url, disableOverride) { function redirect(url, type, initiator, disableOverride) { if (disableLbryTargets && !disableOverride) return if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return - if (!targets.includes(url.host)) return - if (type != ("main_frame" || "sub_frame")) return - //https://odysee.com/$/embed/the-anti-smartphone-revolution/22b482e450c4ca13c464eee8f51b3a52bbb942ae?r=7pAWcQybShS63wz486r8wVv9FpsDJ47A - // to - //https://{instance}/embed/@Coldfusion:f/the-anti-smartphone-revolution:2 - - let instancesList = [] - switch (lbryFrontend) { - case "librarian": - switch (protocol) { - case "loki": - instancesList = [...librarianLokiCustomRedirects] - break - case "i2p": - instancesList = [...librarianI2pRedirectsChecks, ...librarianI2pCustomRedirects] - break - case "tor": - instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects] - } - if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { - instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects] - } - break - case "lbryDesktop": - if (type == "main_frame") { - return url.href.replace(/^https?:\/{2}odysee\.com\//, "lbry://").replace(/:(?=[a-zA-Z0-9])/g, "#") + if (!targets.some(rx => rx.test(url.href))) return + if ((type == "main_frame" && lbryRedirectType == "sub_frame") || (type == "sub_frame" && lbryRedirectType == "main_frame")) return + + const instancesList = getInstancesList() + switch (type) { + case "main_frame": + switch (lbryFrontend) { + case "librarian": + if (instancesList.length === 0) return + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}` + case "lbryDesktop": + if (type == "main_frame") { + return url.href.replace(/^https?:\/{2}odysee\.com\//, "lbry://").replace(/:(?=[a-zA-Z0-9])/g, "#") + } } + case "sub_frame": if (instancesList.length === 0) return + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}`.replace(/\/(?=[a-f0-9]{40})/, ":") } - const randomInstance = utils.getRandomInstance(instancesList) - return `${randomInstance}${url.pathname}${url.search}` } function initDefaults() { @@ -169,6 +180,7 @@ function initDefaults() { disableLbryTargets: true, lbryFrontend: "librarian", lbryTargetsRedirects: redirects, + lbryRedirectType: "both", librarianNormalRedirectsChecks: [...redirects.librarian.normal], librarianNormalCustomRedirects: [], diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 7a97dcdb..9a7d37b3 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -40,53 +40,61 @@ async function initcloudflareBlackList() { function updateInstances() { return new Promise(async resolve => { let http = new XMLHttpRequest() + let fallback = new XMLHttpRequest() http.open("GET", "https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json", false) http.send(null) - if (http.status === 200) { - await initcloudflareBlackList() - const instances = JSON.parse(http.responseText) - - youtubeHelper.setRedirects({ - invidious: instances.invidious, - piped: instances.piped, - pipedMaterial: instances.pipedMaterial, - }) - twitterHelper.setRedirects(instances.nitter) - instagramHelper.setRedirects(instances.bibliogram) - redditHelper.setRedirects({ - libreddit: instances.libreddit, - teddit: instances.teddit, - }) - translateHelper.setRedirects({ - simplyTranslate: instances.simplyTranslate, - lingva: instances.lingva, - }) - searchHelper.setRedirects({ - searx: instances.searx, - searxng: instances.searxng, - whoogle: instances.whoogle, - librex: instances.librex, - }) - wikipediaHelper.setRedirects(instances.wikiless) - mediumHelper.setRedirects(instances.scribe) - quoraHelper.setRedirects(instances.quetre) - libremdbHelper.setRedirects(instances.libremdb) - sendTargetsHelper.setRedirects(instances.send) - tiktokHelper.setRedirects(instances.proxiTok) - lbryHelper.setRedirects(instances.librarian) - reutersHelper.setRedirects(instances.neuters) - youtubeMusicHelper.setRedirects({ - beatbump: instances.beatbump, - hyperpipe: instances.hyperpipe, - }) - mapsHelper.setRedirects(instances.facil) - peertubeHelper.setRedirects(instances.simpleertube) - - console.info("Successfully updated Instances") - resolve(true) - return + if (http.status != 200) { + fallback.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", false) + fallback.send(null) + if (fallback.status === 200) { + http = fallback + } else { + resolve() + return + } } - resolve() + await initcloudflareBlackList() + const instances = JSON.parse(http.responseText) + + youtubeHelper.setRedirects({ + invidious: instances.invidious, + piped: instances.piped, + pipedMaterial: instances.pipedMaterial, + }) + twitterHelper.setRedirects(instances.nitter) + instagramHelper.setRedirects(instances.bibliogram) + redditHelper.setRedirects({ + libreddit: instances.libreddit, + teddit: instances.teddit, + }) + translateHelper.setRedirects({ + simplyTranslate: instances.simplyTranslate, + lingva: instances.lingva, + }) + searchHelper.setRedirects({ + searx: instances.searx, + searxng: instances.searxng, + whoogle: instances.whoogle, + librex: instances.librex, + }) + wikipediaHelper.setRedirects(instances.wikiless) + mediumHelper.setRedirects(instances.scribe) + quoraHelper.setRedirects(instances.quetre) + libremdbHelper.setRedirects(instances.libremdb) + sendTargetsHelper.setRedirects(instances.send) + tiktokHelper.setRedirects(instances.proxiTok) + lbryHelper.setRedirects(instances.librarian) + reutersHelper.setRedirects(instances.neuters) + youtubeMusicHelper.setRedirects({ + beatbump: instances.beatbump, + hyperpipe: instances.hyperpipe, + }) + mapsHelper.setRedirects(instances.facil) + peertubeHelper.setRedirects(instances.simpleertube) + + console.info("Successfully updated Instances") + resolve(true) + return }) } |