about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorSimonBrazell <simon@brazell.com.au>2020-09-01 17:26:23 +1000
committerSimonBrazell <simon@brazell.com.au>2020-09-01 17:26:23 +1000
commitae6f4f6a6cd9fbd5fe583f52782e94641c752706 (patch)
tree40d4d249cb5dadc3ab98cfe453fb8101a3a6c6cf
parentFixes #89 - autoplay reversed, improve instance selects (#90) (diff)
downloadlibredirect-ae6f4f6a6cd9fbd5fe583f52782e94641c752706.zip
Randomise instances when empty (#48)
Diffstat (limited to '')
-rw-r--r--assets/javascript/remove-twitter-sw.js68
-rw-r--r--background.js91
-rw-r--r--manifest.json2
-rw-r--r--pages/options/options.html17
-rw-r--r--pages/options/options.js14
-rw-r--r--pages/styles.css4
6 files changed, 125 insertions, 71 deletions
diff --git a/assets/javascript/remove-twitter-sw.js b/assets/javascript/remove-twitter-sw.js
index d9d3ce3e..222a7283 100644
--- a/assets/javascript/remove-twitter-sw.js
+++ b/assets/javascript/remove-twitter-sw.js
@@ -1,6 +1,20 @@
-'use strict';
+"use strict";
 
-const nitterDefault = 'https://nitter.net';
+const nitterInstances = [
+  "https://nitter.net",
+  "https://nitter.snopyta.org",
+  "https://nitter.42l.fr",
+  "https://nitter.nixnet.services",
+  "https://nitter.13ad.de",
+  "https://nitter.pussthecat.org",
+  "https://nitter.mastodont.cat",
+  "https://nitter",
+  "https://nitter.tedomum.net",
+  "https://nitter.cattube.org",
+  "https://nitter.fdn.fr",
+  "https://nitter.1d4.us",
+  "https://nitter.kavin.rocks",
+];
 
 let disableNitter;
 let nitterInstance;
@@ -9,61 +23,67 @@ let exceptions;
 
 window.browser = window.browser || window.chrome;
 
+function getRandomInstance() {
+  return nitterInstances[~~(nitterInstances.length * Math.random())];
+}
+
 function isNotException(url) {
-  return !exceptions.some(regex => (regex.test(url.href)));
+  return !exceptions.some((regex) => regex.test(url.href));
 }
 
 function shouldRedirect(url) {
-  return !redirectBypassFlag &&
+  return (
+    !redirectBypassFlag &&
     isNotException(url) &&
     !disableNitter &&
     url.host !== nitterInstance &&
-    !url.pathname.includes('/home');
+    !url.pathname.includes("/home")
+  );
 }
 
 function redirectTwitter(url) {
-  if (url.host.split('.')[0] === 'pbs') {
+  if (url.host.split(".")[0] === "pbs") {
     return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
-  } else if (url.host.split('.')[0] === 'video') {
+  } else if (url.host.split(".")[0] === "video") {
     return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
   } else {
     return `${nitterInstance}${url.pathname}${url.search}`;
-  };
+  }
 }
 
 browser.storage.sync.get(
   [
-    'nitterInstance',
-    'disableNitter',
-    'removeTwitterSW',
-    'redirectBypassFlag',
-    'exceptions'
+    "nitterInstance",
+    "disableNitter",
+    "removeTwitterSW",
+    "redirectBypassFlag",
+    "exceptions",
   ],
   (result) => {
     redirectBypassFlag = result.redirectBypassFlag;
     browser.storage.sync.set({
-      redirectBypassFlag: false
+      redirectBypassFlag: false,
     });
     if (!result.removeTwitterSW) {
       disableNitter = result.disableNitter;
-      nitterInstance = result.nitterInstance || nitterDefault;
-      exceptions = result.exceptions ? result.exceptions.map(e => {
-        return new RegExp(e);
-      }) : [];
-      navigator.serviceWorker.getRegistrations().then(registrations => {
+      nitterInstance = result.nitterInstance || getRandomInstance();
+      exceptions = result.exceptions
+        ? result.exceptions.map((e) => {
+            return new RegExp(e);
+          })
+        : [];
+      navigator.serviceWorker.getRegistrations().then((registrations) => {
         for (let registration of registrations) {
-          if (registration.scope === 'https://twitter.com/') {
+          if (registration.scope === "https://twitter.com/") {
             registration.unregister();
-            console.log('Unregistered Twitter SW', registration);
+            console.log("Unregistered Twitter SW", registration);
           }
         }
       });
       const url = new URL(window.location);
       if (shouldRedirect()) {
         const redirect = redirectTwitter(url);
-        console.info(
-          'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`
-        );
+        console.info("Redirecting", `"${url.href}"`, "=>", `"${redirect}"`);
         window.location = redirect;
       }
     }
diff --git a/background.js b/background.js
index ffe1857e..3f5145cd 100644
--- a/background.js
+++ b/background.js
@@ -1,6 +1,5 @@
 "use strict";
 
-const invidiousDefault = "https://invidious.snopyta.org";
 const youtubeDomains = [
   "m.youtube.com",
   "youtube.com",
@@ -22,7 +21,6 @@ const invidiousInstances = [
   "https://invidious.fdn.fr",
   "https://invidious.toot.koeln",
 ];
-const nitterDefault = "https://nitter.net";
 const twitterDomains = [
   "twitter.com",
   "www.twitter.com",
@@ -30,7 +28,20 @@ const twitterDomains = [
   "pbs.twimg.com",
   "video.twimg.com",
 ];
-const bibliogramDefault = "https://bibliogram.art";
+const nitterInstances = [
+  "https://nitter.net",
+  "https://nitter.snopyta.org",
+  "https://nitter.42l.fr",
+  "https://nitter.nixnet.services",
+  "https://nitter.13ad.de",
+  "https://nitter.pussthecat.org",
+  "https://nitter.mastodont.cat",
+  "https://nitter.tedomum.net",
+  "https://nitter.cattube.org",
+  "https://nitter.fdn.fr",
+  "https://nitter.1d4.us",
+  "https://nitter.kavin.rocks",
+];
 const instagramDomains = [
   "instagram.com",
   "www.instagram.com",
@@ -64,6 +75,13 @@ const bibliogramBypassPaths = /\/(accounts\/|embeds?.js)/;
 const bibliogramInstances = [
   "https://bibliogram.art",
   "https://bibliogram.snopyta.org",
+  "https://bibliogram.pussthecat.org",
+  "https://bibliogram.nixnet.services",
+  "https://bg.endl.site",
+  "https://bibliogram.13ad.de	",
+  "https://bibliogram.stemy.me	",
+  "https://bibliogram.hamster.dance",
+  "https://bibliogram.ggc-project.de",
 ];
 const osmDefault = "https://openstreetmap.org";
 const googleMapsRegex = /https?:\/\/(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/;
@@ -128,9 +146,9 @@ browser.storage.sync.get(
     disableInvidious = result.disableInvidious;
     disableBibliogram = result.disableBibliogram;
     disableOsm = result.disableOsm;
-    nitterInstance = result.nitterInstance || nitterDefault;
-    invidiousInstance = result.invidiousInstance || invidiousDefault;
-    bibliogramInstance = result.bibliogramInstance || bibliogramDefault;
+    nitterInstance = result.nitterInstance;
+    invidiousInstance = result.invidiousInstance;
+    bibliogramInstance = result.bibliogramInstance;
     osmInstance = result.osmInstance || osmDefault;
     alwaysProxy = result.alwaysProxy;
     onlyEmbeddedVideo = result.onlyEmbeddedVideo;
@@ -150,14 +168,13 @@ browser.storage.sync.get(
 
 browser.storage.onChanged.addListener((changes) => {
   if ("nitterInstance" in changes) {
-    nitterInstance = changes.nitterInstance.newValue || nitterDefault;
+    nitterInstance = changes.nitterInstance.newValue;
   }
   if ("invidiousInstance" in changes) {
-    invidiousInstance = changes.invidiousInstance.newValue || invidiousDefault;
+    invidiousInstance = changes.invidiousInstance.newValue;
   }
   if ("bibliogramInstance" in changes) {
-    bibliogramInstance =
-      changes.bibliogramInstance.newValue || bibliogramDefault;
+    bibliogramInstance = changes.bibliogramInstance.newValue;
   }
   if ("osmInstance" in changes) {
     osmInstance = changes.osmInstance.newValue || osmDefault;
@@ -205,6 +222,10 @@ browser.storage.onChanged.addListener((changes) => {
   }
 });
 
+function getRandomInstance(instanceList) {
+  return instanceList[~~(instanceList.length * Math.random())];
+}
+
 function addressToLatLng(address, callback) {
   const xmlhttp = new XMLHttpRequest();
   xmlhttp.onreadystatechange = () => {
@@ -248,6 +269,7 @@ function redirectYouTube(url, initiator, type) {
   if (
     initiator &&
     (initiator.origin === invidiousInstance ||
+      invidiousInstances.includes(initiator.origin) ||
       youtubeDomains.includes(initiator.host))
   ) {
     return null;
@@ -284,7 +306,9 @@ function redirectYouTube(url, initiator, type) {
   }
   url.searchParams.append("autoplay", invidiousAutoplay ? 1 : 0);
 
-  return `${invidiousInstance}${url.pathname}${url.search}`;
+  return `${invidiousInstance || getRandomInstance(invidiousInstances)}${
+    url.pathname
+  }${url.search}`;
 }
 
 function redirectTwitter(url, initiator) {
@@ -298,6 +322,7 @@ function redirectTwitter(url, initiator) {
     isFirefox() &&
     initiator &&
     (initiator.origin === nitterInstance ||
+      nitterInstances.includes(initiator.origin) ||
       twitterDomains.includes(initiator.host))
   ) {
     browser.storage.sync.set({
@@ -306,15 +331,21 @@ function redirectTwitter(url, initiator) {
     return null;
   }
   if (url.host.split(".")[0] === "pbs") {
-    return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
+    return `${
+      nitterInstance || getRandomInstance(nitterInstances)
+    }/pic/${encodeURIComponent(url.href)}`;
   } else if (url.host.split(".")[0] === "video") {
-    return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
+    return `${
+      nitterInstance || getRandomInstance(nitterInstances)
+    }/gif/${encodeURIComponent(url.href)}`;
   } else if (url.pathname.includes("tweets")) {
-    return `${nitterInstance}${url.pathname.replace("/tweets", "")}${
-      url.search
-    }`;
+    return `${
+      nitterInstance || getRandomInstance(nitterInstances)
+    }${url.pathname.replace("/tweets", "")}${url.search}`;
   } else {
-    return `${nitterInstance}${url.pathname}${url.search}`;
+    return `${nitterInstance || getRandomInstance(nitterInstances)}${
+      url.pathname
+    }${url.search}`;
   }
 }
 
@@ -326,6 +357,7 @@ function redirectInstagram(url, initiator, type) {
   if (
     initiator &&
     (initiator.origin === bibliogramInstance ||
+      bibliogramInstances.includes(initiator.origin) ||
       instagramDomains.includes(initiator.host))
   ) {
     return null;
@@ -338,10 +370,14 @@ function redirectInstagram(url, initiator, type) {
     url.pathname === "/" ||
     instagramReservedPaths.includes(url.pathname.split("/")[1])
   ) {
-    return `${bibliogramInstance}${url.pathname}${url.search}`;
+    return `${bibliogramInstance || getRandomInstance(bibliogramInstances)}${
+      url.pathname
+    }${url.search}`;
   } else {
     // Likely a user profile, redirect to '/u/...'
-    return `${bibliogramInstance}/u${url.pathname}${url.search}`;
+    return `${bibliogramInstance || getRandomInstance(bibliogramInstances)}/u${
+      url.pathname
+    }${url.search}`;
   }
 }
 
@@ -482,14 +518,7 @@ browser.webRequest.onBeforeRequest.addListener(
 );
 
 browser.runtime.onInstalled.addListener((details) => {
-  if (details.reason === "install") {
-    browser.storage.sync.set({
-      bibliogramInstance:
-        bibliogramInstances[~~(bibliogramInstances.length * Math.random())],
-      invidiousInstance:
-        invidiousInstances[~~(invidiousInstances.length * Math.random())],
-    });
-  } else if (details.reason === "update") {
+  if (details.reason === "update") {
     browser.storage.sync.get(
       ["whitelist", "exceptions", "invidiousInstance"],
       (result) => {
@@ -502,13 +531,9 @@ browser.runtime.onInstalled.addListener((details) => {
             whitelist: null,
           });
         }
-        if (
-          result.invidiousInstance === "https://invidio.us" ||
-          result.invidiousInstance === null
-        ) {
+        if (result.invidiousInstance === "https://invidio.us") {
           browser.storage.sync.set({
-            invidiousInstance:
-              invidiousInstances[~~(invidiousInstances.length * Math.random())],
+            invidiousInstance: null,
           });
         }
       }
diff --git a/manifest.json b/manifest.json
index 88be6e84..ea0756b3 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
 {
   "name": "__MSG_extensionName__",
   "description": "__MSG_extensionDescription__",
-  "version": "1.1.40",
+  "version": "1.1.41",
   "manifest_version": 2,
   "background": {
     "scripts": ["background.js"],
diff --git a/pages/options/options.html b/pages/options/options.html
index 8e074037..6641e5c4 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -127,7 +127,7 @@
             id="nitter-instance"
             type="url"
             name="nitter-instance"
-            placeholder="https://nitter.net"
+            placeholder="Random instance (none selected)"
           />
         </div>
       </section>
@@ -137,7 +137,7 @@
           <input
             id="invidious-instance"
             type="url"
-            placeholder="https://invidious.snopyta.org"
+            placeholder="Random instance (none selected)"
           />
         </div>
       </section>
@@ -147,7 +147,7 @@
           <input
             id="bibliogram-instance"
             type="url"
-            placeholder="https://bibliogram.art"
+            placeholder="Random instance (none selected)"
           />
         </div>
       </section>
@@ -228,9 +228,8 @@
           <option value="">Default</option>
           <option value="hd720">720p</option>
           <option value="medium">480p</option>
-          <option value="dash"
-            >DASH (Dynamic Adaptive Streaming over HTTP)</option
-          >
+          <option value="dash">DASH (Dynamic Adaptive Streaming over HTTP)</option>
+          </option>
         </select>
       </section>
       <section class="settings-block">
@@ -257,7 +256,9 @@
         </table>
       </section>
       <section class="settings-block">
-        <h1 data-localise="__MSG_invidiousVolume__">Invidious Volume</h1>
+        <h1 data-localise="__MSG_invidiousVolume__">
+          Invidious Volume
+        </h1>
         <input
           id="invidious-volume"
           name="invidious-volume"
@@ -265,7 +266,7 @@
           min="0"
           max="100"
           step="1"
-        />
+        /><span id="volume-value"></span>
       </section>
       <section class="settings-block">
         <h1 data-localise="__MSG_invidiousPlayerStyle__">
diff --git a/pages/options/options.js b/pages/options/options.js
index 89ef315f..8149be7b 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -140,6 +140,9 @@ browser.storage.sync.get(
     exceptions = result.exceptions || [];
     exceptions.forEach(prependExceptionsItem);
     invidiousVolume.value = result.invidiousVolume;
+    document.querySelector("#volume-value").textContent = result.invidiousVolume
+      ? `${result.invidiousVolume}%`
+      : " - ";
     invidiousPlayerStyle.value = result.invidiousPlayerStyle || "";
     invidiousSubtitles.value = result.invidiousSubtitles || "";
     invidiousAutoplay.checked = result.invidiousAutoplay;
@@ -313,11 +316,12 @@ persistInvidiousPrefs.addEventListener("change", (event) => {
 });
 
 let invidiousVolumeChange = debounce(() => {
-  if (invidiousInstance.checkValidity()) {
-    browser.storage.sync.set({
-      invidiousVolume: invidiousVolume.value,
-    });
-  }
+  document.querySelector(
+    "#volume-value"
+  ).textContent = `${invidiousVolume.value}%`;
+  browser.storage.sync.set({
+    invidiousVolume: invidiousVolume.value,
+  });
 }, 500);
 invidiousVolume.addEventListener("input", invidiousVolumeChange);
 
diff --git a/pages/styles.css b/pages/styles.css
index 300dadbf..dd58676b 100644
--- a/pages/styles.css
+++ b/pages/styles.css
@@ -457,3 +457,7 @@ input[type="range"]::-moz-range-thumb {
     background-color: var(--bg-secondary);
   }
 }
+
+#volume-value {
+  float: right;
+}