about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-07-31 11:57:59 +0300
committerManeraKai <manerakai@protonmail.com>2022-07-31 11:57:59 +0300
commitb3c44dfbd4bec81152673964224335cac31c644a (patch)
treea8b7d39cd5a038d429d3b425555bf4fee9969461 /src/assets/javascripts
parentMerge https://github.com/libredirect/libredirect (diff)
parentMinor spelling mistake (diff)
downloadlibredirect-b3c44dfbd4bec81152673964224335cac31c644a.zip
Merge branch 'master' of https://codeberg.org/LibRedirect/libredirect
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/lbry.js70
-rw-r--r--src/assets/javascripts/utils.js96
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
 	})
 }