about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-04-25 18:48:39 +0300
committerManeraKai <manerakai@protonmail.com>2022-04-25 18:48:39 +0300
commitcd0596c2eb46fc4fbfdd0beb4191e3cd8b5a1b36 (patch)
tree0c1a07afa147f9e136705f5d2c2575ecd6beaaec /src
parentImproved cloudflare detection (diff)
downloadlibredirect-cd0596c2eb46fc4fbfdd0beb4191e3cd8b5a1b36.zip
Improving code structure. Added libreddit settings #192
Diffstat (limited to 'src')
-rw-r--r--src/assets/javascripts/helpers/reddit.js303
-rw-r--r--src/assets/javascripts/helpers/twitter.js3
-rw-r--r--src/pages/background/background.js9
-rw-r--r--src/pages/options/reddit/reddit.html86
-rw-r--r--src/pages/options/reddit/reddit.js243
-rw-r--r--src/pages/options/twitter/twitter.js15
6 files changed, 419 insertions, 240 deletions
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index 9d427c2e..9cd7600b 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -9,27 +9,8 @@ const targets = [
 let redirects = {
   // modern UI
   "libreddit": {
-    "normal": [
-      "https://libredd.it",
-      "https://libreddit.spike.codes",
-      "https://libreddit.dothq.co",
-      "https://libreddit.kavin.rocks",
-      "https://libreddit.bcow.xyz",
-      "https://libreddit.40two.app",
-      "https://reddit.invak.id",
-      "https://reddit.phii.me",
-      "https://lr.riverside.rocks",
-      "https://libreddit.silkky.cloud",
-      "https://libreddit.database.red",
-      "https://libreddit.exonip.de",
-      "https://libreddit.domain.glass",
-    ],
-    "tor": [
-      "http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion",
-      "http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion",
-      "http://dflv6yjt7il3n3tggf4qhcmkzbti2ppytqx3o7pjrzwgntutpewscyid.onion",
-      "http://kphht2jcflojtqte4b4kyx7p2ahagv4debjj32nre67dxz7y57seqwyd.onion",
-    ]
+    "normal": [],
+    "tor": []
   },
   // old UI
   "teddit": {
@@ -165,61 +146,56 @@ function setDisableReddit(val) {
 }
 
 let frontend;
-const getFrontend = () => frontend;
-function setFrontend(val) {
-  frontend = val;
-  browser.storage.local.set({ redditFrontend: frontend })
-};
-
 let protocol;
-const getProtocol = () => protocol;
-function setProtocol(val) {
-  protocol = val;
-  browser.storage.local.set({ redditProtocol: val })
-  console.log("redditProtocol: ", val)
-}
-
 let bypassWatchOnReddit;
-const getBypassWatchOnReddit = () => bypassWatchOnReddit;
-function setBypassWatchOnReddit(val) {
-  bypassWatchOnReddit = val;
-  browser.storage.local.set({ bypassWatchOnReddit })
-  console.log("bypassWatchOnReddit: ", bypassWatchOnReddit)
-}
+
+let enableCustom;
 
 let theme;
-let applyThemeToSites;
+let front_page;
+let layout;
+let wide;
+let post_sort;
+let comment_sort;
+let show_nsfw;
+let autoplay_videos;
+let use_hls;
+let hide_hls_notification;
+
 function initLibredditCookies() {
-  if (applyThemeToSites && theme != 'DEFAULT') {
-    let allInstances = [...redirects.libreddit.normal, ...redirects.libreddit.tor, ...libredditNormalCustomRedirects, ...libredditTorCustomRedirects]
-    let checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects, ...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]
-    for (const instanceUrl of allInstances)
-      if (!checkedInstances.includes(instanceUrl))
-        browser.cookies.remove({
-          url: instanceUrl,
-          name: "theme",
-        })
-    for (const instanceUrl of checkedInstances)
-      browser.cookies.set({
-        url: instanceUrl,
-        name: "theme",
-        value: theme
-      })
+  if (enableCustom) {
+    let checkedInstances = [
+      ...libredditNormalRedirectsChecks,
+      ...libredditNormalCustomRedirects,
+      ...libredditTorRedirectsChecks,
+      ...libredditTorCustomRedirects
+    ]
+
+    for (const instance of checkedInstances) {
+      browser.cookies.set({ url: instance, name: "theme", value: theme })
+      browser.cookies.set({ url: instance, name: "front_page", value: front_page })
+      browser.cookies.set({ url: instance, name: "layout", value: layout })
+      browser.cookies.set({ url: instance, name: "wide", value: wide ? 'on' : 'off' })
+      browser.cookies.set({ url: instance, name: "post_sort", value: post_sort })
+      browser.cookies.set({ url: instance, name: "comment_sort", value: comment_sort })
+      browser.cookies.set({ url: instance, name: "show_nsfw", value: show_nsfw ? 'on' : 'off' })
+      browser.cookies.set({ url: instance, name: "autoplay_videos", value: autoplay_videos ? 'on' : 'off' })
+      browser.cookies.set({ url: instance, name: "use_hls", value: use_hls ? 'on' : 'off' })
+      browser.cookies.set({ url: instance, name: "hide_hls_notification", value: hide_hls_notification ? 'on' : 'off' })
+    }
   }
 }
 function initTedditCookies() {
   let themeValue;
   if (theme == 'light') themeValue = 'white';
   if (theme == 'dark') themeValue = 'dark';
-  if (applyThemeToSites && themeValue) {
-    let allInstances = [...redirects.teddit.normal, ...redirects.teddit.tor, ...tedditNormalCustomRedirects, ...tedditTorCustomRedirects]
-    let checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects, ...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]
-    for (const instanceUrl of allInstances)
-      if (!checkedInstances.includes(instanceUrl))
-        browser.cookies.remove({
-          url: instanceUrl,
-          name: "theme",
-        })
+  if (enableCustom && themeValue) {
+    let checkedInstances = [
+      ...tedditNormalRedirectsChecks,
+      ...tedditNormalCustomRedirects,
+      ...tedditTorRedirectsChecks,
+      ...tedditTorCustomRedirects
+    ]
     for (const instanceUrl of checkedInstances)
       browser.cookies.set({
         url: instanceUrl,
@@ -374,8 +350,8 @@ function reverse(url) {
     ...nitterNormalCustomRedirects,
     ...nitterTorCustomRedirects].includes(protocolHost)
   ) return;
-  if(url.pathname.includes('/pics/w:null_'))
-  return `https://reddit.com${url.pathname}${url.search}`;
+  if (url.pathname.includes('/pics/w:null_'))
+    return `https://reddit.com${url.pathname}${url.search}`;
 }
 
 function switchInstance(url) {
@@ -428,70 +404,128 @@ function switchInstance(url) {
   return `${randomInstance}${url.pathname}${url.search}`;
 }
 
-async function init() {
-  return new Promise(resolve => {
-    fetch('/instances/data.json').then(response => response.text()).then(data => {
+async function initDefaults() {
+  return new Promise(async resolve => {
+    fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
-      browser.storage.local.get(
-        [
-          "disableReddit",
-          "redditFrontend",
-          "redditRedirects",
-
-          "libredditNormalRedirectsChecks",
-          "libredditNormalCustomRedirects",
-          "libredditTorRedirectsChecks",
-          "libredditTorCustomRedirects",
-
-          "tedditNormalRedirectsChecks",
-          "tedditNormalCustomRedirects",
-          "tedditTorRedirectsChecks",
-          "tedditTorCustomRedirects",
-
-          "theme",
-          "applyThemeToSites",
-
-          "redditProtocol",
-          "bypassWatchOnReddit",
-
-          "alwaysUsePreferred",
-        ], r => {
-          disableReddit = r.disableReddit ?? false;
-          protocol = r.redditProtocol ?? 'normal';
-          frontend = r.redditFrontend ?? 'libreddit';
-
-          bypassWatchOnReddit = r.bypassWatchOnReddit ?? true;
-
-          alwaysUsePreferred = r.alwaysUsePreferred ?? false;
-
-          redirects.teddit = dataJson.teddit;
-          redirects.libreddit = dataJson.libreddit;
-          if (r.redditRedirects) redirects = r.redditRedirects;
-
-          if (r.redditRedirects) redirects = r.redditRedirects;
-
-          theme = r.theme ?? 'DEFAULT';
-          applyThemeToSites = r.applyThemeToSites ?? false;
-
-          libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks ?? [...redirects.libreddit.normal];
-          libredditNormalCustomRedirects = r.libredditNormalCustomRedirects ?? [];
-
-          libredditTorRedirectsChecks = r.libredditTorRedirectsChecks ?? [...redirects.libreddit.tor];
-          libredditTorCustomRedirects = r.libredditTorCustomRedirects ?? [];
-
-          tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks ?? [...redirects.teddit.normal];
-          tedditNormalCustomRedirects = r.tedditNormalCustomRedirects ?? [];
-
-          tedditTorRedirectsChecks = r.tedditTorRedirectsChecks ?? [...redirects.teddit.tor];
-          tedditTorCustomRedirects = r.tedditTorCustomRedirects ?? [];
-
-          initLibredditCookies();
-          initTedditCookies();
-
-          resolve();
-        }
-      );
+      redirects.teddit = dataJson.teddit;
+      redirects.libreddit = dataJson.libreddit;
+      await browser.storage.local.set({
+        disableReddit: false,
+        redditProtocol: 'normal',
+        redditFrontend: 'libreddit',
+
+        bypassWatchOnReddit: true,
+        alwaysUsePreferred: false,
+
+        redditRedirects: {
+          'libreddit': redirects.libreddit,
+          'teddit': redirects.teddit,
+        },
+
+        libredditNormalRedirectsChecks: [...redirects.libreddit.normal],
+        libredditNormalCustomRedirects: [],
+
+        libredditTorRedirectsChecks: [...redirects.libreddit.tor],
+        libredditTorCustomRedirects: [],
+
+        tedditNormalRedirectsChecks: [...redirects.teddit.normal],
+        tedditNormalCustomRedirects: [],
+
+        tedditTorRedirectsChecks: [...redirects.teddit.tor],
+        tedditTorCustomRedirects: [],
+
+        enableLibredditCustomSettings: false,
+
+        redditTheme: 'system',
+        redditFrontPage: 'default',
+        redditLayout: 'card',
+        redditWide: false,
+        redditPostSort: 'hot',
+        redditCommentSort: 'confidence',
+        redditShowNsfw: false,
+        redditUseHls: false,
+        redditHideHlsNotification: false,
+      });
+      resolve();
     });
+  })
+}
+
+async function init() {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "disableReddit",
+        "redditFrontend",
+        "redditRedirects",
+
+        "libredditNormalRedirectsChecks",
+        "libredditNormalCustomRedirects",
+        "libredditTorRedirectsChecks",
+        "libredditTorCustomRedirects",
+
+        "tedditNormalRedirectsChecks",
+        "tedditNormalCustomRedirects",
+        "tedditTorRedirectsChecks",
+        "tedditTorCustomRedirects",
+
+
+        "redditProtocol",
+        "bypassWatchOnReddit",
+
+        "alwaysUsePreferred",
+
+        "enableLibredditCustomSettings",
+
+        "redditTheme",
+        "redditFrontPage",
+        "redditLayout",
+        "redditWide",
+        "redditPostSort",
+        "redditCommentSort",
+        "redditShowNsfw",
+        "redditAutoplayVideos",
+        "redditUseHls",
+        "redditHideHlsNotification",
+      ], r => {
+        disableReddit = r.disableReddit;
+        protocol = r.redditProtocol;
+        frontend = r.redditFrontend;
+
+        bypassWatchOnReddit = r.bypassWatchOnReddit;
+        alwaysUsePreferred = r.alwaysUsePreferred;
+
+        redirects = r.redditRedirects;
+
+        libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks;
+        libredditNormalCustomRedirects = r.libredditNormalCustomRedirects;
+
+        libredditTorRedirectsChecks = r.libredditTorRedirectsChecks;
+        libredditTorCustomRedirects = r.libredditTorCustomRedirects;
+
+        tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks;
+        tedditNormalCustomRedirects = r.tedditNormalCustomRedirects;
+
+        tedditTorRedirectsChecks = r.tedditTorRedirectsChecks;
+        tedditTorCustomRedirects = r.tedditTorCustomRedirects;
+
+        enableCustom = r.enableLibredditCustomSettings;
+
+        theme = r.redditTheme;
+        front_page = r.redditFrontPage;
+        layout = r.redditLayout;
+        wide = r.redditWide;
+        post_sort = r.redditPostSort;
+        comment_sort = r.redditCommentSort;
+        show_nsfw = r.redditShowNsfw;
+        autoplay_videos = r.redditAutoplayVideos;
+        use_hls = r.redditUseHls;
+        hide_hls_notification = r.redditHideHlsNotification;
+
+        resolve();
+      }
+    );
   });
 }
 
@@ -505,14 +539,8 @@ export default {
   getDisableReddit,
   setDisableReddit,
 
-  getFrontend,
-  setFrontend,
-
-  getProtocol,
-  setProtocol,
-
-  getBypassWatchOnReddit,
-  setBypassWatchOnReddit,
+  initLibredditCookies,
+  initTedditCookies,
 
   getLibredditNormalRedirectsChecks,
   setLibredditNormalRedirectsChecks,
@@ -538,5 +566,6 @@ export default {
 
   redirect,
   init,
+  initDefaults,
   switchInstance,
 };
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index da33f09f..3713069c 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -290,6 +290,7 @@ function isNitter(url, type) {
 
 function initNitterCookies() {
   if (enableCustomSettings) {
+    console.log('initNitterCookies')
     let allInstances = [...redirects.nitter.normal, ...redirects.nitter.tor, ...nitterNormalCustomRedirects, ...nitterTorCustomRedirects]
     let checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects, ...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]
     for (const instanceUrl of allInstances) if (!checkedInstances.includes(instanceUrl))
@@ -445,8 +446,6 @@ async function init() {
           muteVideos = r.nitterMuteVideos ?? false;
           autoplayGifs = r.nitterAutoplayGifs ?? true;
 
-          initNitterCookies();
-
           resolve();
         }
       );
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index fc9503ff..1aecd816 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -22,6 +22,13 @@ import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js
 
 window.browser = window.browser || window.chrome;
 
+browser.runtime.onInstalled.addListener(async details => {
+  if (details.reason == 'install') {
+    await redditHelper.initDefaults();
+    await wholeInit();
+  }
+});
+
 async function wholeInit() {
   await youtubeHelper.init();
   await youtubeMusicHelper.init();
@@ -49,6 +56,8 @@ browser.storage.onChanged.addListener(wholeInit);
 
 let BYPASSTABs = [];
 
+
+
 browser.webRequest.onBeforeRequest.addListener(
   details => {
     const url = new URL(details.url);
diff --git a/src/pages/options/reddit/reddit.html b/src/pages/options/reddit/reddit.html
index 80aa77c5..47c0b3b2 100644
--- a/src/pages/options/reddit/reddit.html
+++ b/src/pages/options/reddit/reddit.html
@@ -81,9 +81,93 @@
       <h4 data-localise="__MSG_bypassReddit__">Bypass "Open in Reddit"</h4>
       <input id="bypass-watch-on-reddit" type="checkbox">
     </div>
-    <hr>
     <div id="libreddit">
+      <div class="some-block option-block">
+        <h4 data-localise="__MSG_enableCustomSettings__">Enable Custom Settings (will use cookies)</h4>
+        <input id="enable-libreddit-custom-settings" type="checkbox">
+      </div>
       <hr>
+      <div class="custom-settings"> 
+        <div class="some-block option-block">
+          <h2>Appearance</h2>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_theme__">Theme</h4>
+          <select class="theme">
+            <option value="system">System</option>
+            <option value="light">Light</option>
+            <option value="dark">Dark</option>
+            <option value="black">Black</option>
+            <option value="dracula">Dracula</option>
+            <option value="nord">Nord</option>
+            <option value="laserwave">Laserwave</option>
+            <option value="violet">Violet</option>
+            <option value="gold">Gold</option>
+          </select>
+        </div>
+        <div class="some-block option-block">
+          <h2>Interface</h2>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_frontPage__">Front page</h4>
+          <select class="front_page">
+            <option value="default">Default</option>
+            <option value="popular">Popular</option>
+            <option value="all">All</option>
+          </select>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_frontLayout__">Front Layout</h4>
+          <select class="layout">
+            <option value="card">Card</option>
+            <option value="clean">Clean</option>
+            <option value="compact">Compact</option>
+          </select>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_wideUI__">Wide UI</h4>
+          <input class="wide" type="checkbox">
+        </div>
+        <div class="some-block option-block">
+          <h2>Content</h2>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_defaultSubredditPostSort__">Default subreddit post sort</h4>
+          <select class="post_sort">
+            <option value="hot">Hot</option>
+            <option value="new">New</option>
+            <option value="top">Top</option>
+            <option value="rising">Rising</option>
+            <option value="controversial">Controversial</option>
+          </select>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_defaultCommentSort__">Default comment sort</h4>
+          <select class="comment_sort">
+            <option value="confidence">Confidence</option>
+            <option value="top">Top</option>
+            <option value="new">New</option>
+            <option value="controversial">Controversial</option>
+            <option value="old">Old</option>
+          </select>
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_showNsfwPosts__">Show NSFW posts</h4>
+          <input class="show_nsfw" type="checkbox">
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_autoplayVideos__">Autoplay videos</h4>
+          <input class="autoplay_videos" type="checkbox">
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_useHlsForVideos__">Use HLS for videos</h4>
+          <input class="use_hls" type="checkbox">
+        </div>
+        <div class="some-block option-block">
+          <h4 data-localise="__MSG_hideNotificationAboutPossibleHlsUsage__">Hide notification about possible HLS usage</h4>
+          <input class="hide_hls_notification" type="checkbox">
+        </div>
+      </div>
       <div class="normal">
                 <div class="some-block option-block">
                   <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
diff --git a/src/pages/options/reddit/reddit.js b/src/pages/options/reddit/reddit.js
index 36bb8a5f..9fb5589a 100644
--- a/src/pages/options/reddit/reddit.js
+++ b/src/pages/options/reddit/reddit.js
@@ -1,48 +1,56 @@
 import redditHelper from "../../../assets/javascripts/helpers/reddit.js";
 import commonHelper from "../../../assets/javascripts/helpers/common.js";
 
-let disableRedditElement = document.getElementById("disable-reddit");
-disableRedditElement.addEventListener("change",
-    (event) => redditHelper.setDisableReddit(!event.target.checked)
-);
 let libredditDivElement = document.getElementById("libreddit")
 let tedditDivElement = document.getElementById("teddit")
+let enableLibredditSettingsElement = document.getElementById("enable-libreddit-custom-settings");
+let customSettingsDivElement = document.getElementsByClassName("custom-settings");
 
-function changeFrontendsSettings(frontend) {
-    let frontendElement = document.getElementById("frontend");
-    if (frontend == 'libreddit') {
-        frontendElement.innerHTML = 'Frontend';
-        libredditDivElement.style.display = 'block';
-        tedditDivElement.style.display = 'none';
-    }
-    else if (frontend == 'teddit') {
-        frontendElement.innerHTML = 'Frontend';
-        libredditDivElement.style.display = 'none';
-        tedditDivElement.style.display = 'block';
-    }
-    else if (frontend == 'old') {
-        frontendElement.innerHTML = `Frontend: <span style="color:red;">This isn't a fully private frontend</span>`;
-        libredditDivElement.style.display = 'none';
-        tedditDivElement.style.display = 'none';
-    }
-}
+let disableRedditElement = document.getElementById("disable-reddit");
 let redditFrontendElement = document.getElementById("reddit-frontend");
-redditFrontendElement.addEventListener("change",
-    (event) => {
-        let frontend = event.target.options[redditFrontendElement.selectedIndex].value
-        redditHelper.setFrontend(frontend)
-        changeFrontendsSettings(frontend);
-    }
-);
-
 let protocolElement = document.getElementById("protocol")
-protocolElement.addEventListener("change",
-    (event) => {
-        let protocol = event.target.options[protocolElement.selectedIndex].value
-        redditHelper.setProtocol(protocol);
-        changeProtocolSettings(protocol);
-    }
-);
+let bypassWatchOnRedditElement = document.getElementById("bypass-watch-on-reddit")
+
+let theme = document.getElementById('libreddit').getElementsByClassName('theme')[0];
+let front_page = document.getElementById('libreddit').getElementsByClassName('front_page')[0];
+let layout = document.getElementById('libreddit').getElementsByClassName('layout')[0];
+let wide = document.getElementById('libreddit').getElementsByClassName('wide')[0];
+let post_sort = document.getElementById('libreddit').getElementsByClassName('post_sort')[0];
+let comment_sort = document.getElementById('libreddit').getElementsByClassName('comment_sort')[0];
+let show_nsfw = document.getElementById('libreddit').getElementsByClassName('show_nsfw')[0];
+let autoplay_videos = document.getElementById('libreddit').getElementsByClassName('autoplay_videos')[0];
+let use_hls = document.getElementById('libreddit').getElementsByClassName('use_hls')[0];
+let hide_hls_notification = document.getElementById('libreddit').getElementsByClassName('hide_hls_notification')[0];
+
+document.addEventListener("change", async () => {
+    await browser.storage.local.set({
+        disableReddit: !disableRedditElement.checked,
+        bypassWatchOnReddit: bypassWatchOnRedditElement.checked,
+        redditProtocol: protocolElement.value,
+        redditFrontend: redditFrontendElement.value,
+
+        enableLibredditCustomSettings: enableLibredditSettingsElement.checked,
+
+        redditTheme: theme.value,
+        redditFrontPage: front_page.value,
+        redditLayout: layout.value,
+        redditWide: wide.checked,
+        redditPostSort: post_sort.value,
+        redditCommentSort: comment_sort.value,
+        redditShowNsfw: show_nsfw.checked,
+        redditAutoplayVideos: autoplay_videos.checked,
+        redditUseHls: use_hls.checked,
+        redditHideHlsNotification: hide_hls_notification.checked,
+    });
+    init();
+})
+
+
+window.onblur = () => {
+    console.log('initting cookies')
+    redditHelper.initLibredditCookies();
+    redditHelper.initTedditCookies();
+}
 
 function changeProtocolSettings(protocol) {
     let normalLibredditDiv = libredditDivElement.getElementsByClassName("normal")[0];
@@ -62,77 +70,126 @@ function changeProtocolSettings(protocol) {
         torTedditDiv.style.display = 'block';
         torLibredditDiv.style.display = 'block';
     }
+    if (enableLibredditSettingsElement.checked)
+        for (const item of customSettingsDivElement) item.style.display = 'block';
+    else
+        for (const item of customSettingsDivElement) item.style.display = 'none';
 }
+function changeFrontendsSettings(frontend) {
+    let frontendElement = document.getElementById("frontend");
+    if (frontend == 'libreddit') {
+        frontendElement.innerHTML = 'Frontend';
+        libredditDivElement.style.display = 'block';
+        tedditDivElement.style.display = 'none';
+    }
+    else if (frontend == 'teddit') {
+        frontendElement.innerHTML = 'Frontend';
+        libredditDivElement.style.display = 'none';
+        tedditDivElement.style.display = 'block';
+    }
+    else if (frontend == 'old') {
+        frontendElement.innerHTML = `Frontend: <span style="color:red;">This isn't a fully private frontend</span>`;
+        libredditDivElement.style.display = 'none';
+        tedditDivElement.style.display = 'none';
+    }
+}
+function init() {
+    redditHelper.init().then(() => {
+        browser.storage.local.get(
+            [
+                "disableReddit",
+                "bypassWatchOnReddit",
+                "redditProtocol",
+                "redditFrontend",
+
+                "enableLibredditCustomSettings",
+
+                "redditTheme",
+                "redditFrontPage",
+                "redditLayout",
+                "redditWide",
+                "redditPostSort",
+                "redditCommentSort",
+                "redditShowNsfw",
+                "redditAutoplayVideos",
+                "redditUseHls",
+                "redditHideHlsNotification",
+            ],
+            r => {
+                disableRedditElement.checked = !r.disableReddit
+                bypassWatchOnRedditElement.checked = r.bypassWatchOnReddit
+                protocolElement.value = r.redditProtocol
+                redditFrontendElement.value = r.redditFrontend
+                enableLibredditSettingsElement.checked = r.enableLibredditCustomSettings
+                changeFrontendsSettings(r.redditFrontend);
+                changeProtocolSettings(r.redditProtocol);
+
+                theme.value = r.redditTheme;
+                front_page.value = r.redditFrontPage;
+                layout.value = r.redditLayout;
+                wide.checked = r.redditWide;
+                post_sort.value = r.redditPostSort;
+                comment_sort.value = r.redditCommentSort;
+                show_nsfw.checked = r.redditShowNsfw;
+                autoplay_videos.checked = r.redditAutoplayVideos;
+                use_hls.checked = r.redditUseHls;
+                hide_hls_notification.checked = r.redditHideHlsNotification;
+            }
+        )
 
-let bypassWatchOnRedditElement = document.getElementById("bypass-watch-on-reddit")
-bypassWatchOnRedditElement.addEventListener("change",
-    event => redditHelper.setBypassWatchOnReddit(event.target.checked)
-);
-
-redditHelper.init().then(() => {
-    disableRedditElement.checked = !redditHelper.getDisableReddit();
-    bypassWatchOnRedditElement.checked = redditHelper.getBypassWatchOnReddit();
-
-    let frontend = redditHelper.getFrontend();
-    redditFrontendElement.value = frontend;
-    changeFrontendsSettings(frontend);
-
-    let protocol = redditHelper.getProtocol();
-    protocolElement.value = protocol;
-    changeProtocolSettings(protocol);
+        browser.storage.local.get("libredditLatency").then(r => {
+            commonHelper.processDefaultCustomInstances(
+                'libreddit',
+                'normal',
+                redditHelper,
+                document,
+                redditHelper.getLibredditNormalRedirectsChecks,
+                redditHelper.setLibredditNormalRedirectsChecks,
+                redditHelper.getLibredditNormalCustomRedirects,
+                redditHelper.setLibredditNormalCustomRedirects,
+                r.libredditLatency,
+            )
+        })
 
-    browser.storage.local.get("libredditLatency").then(r => {
         commonHelper.processDefaultCustomInstances(
             'libreddit',
-            'normal',
+            'tor',
             redditHelper,
             document,
-            redditHelper.getLibredditNormalRedirectsChecks,
-            redditHelper.setLibredditNormalRedirectsChecks,
-            redditHelper.getLibredditNormalCustomRedirects,
-            redditHelper.setLibredditNormalCustomRedirects,
-            r.libredditLatency,
+            redditHelper.getLibredditTorRedirectsChecks,
+            redditHelper.setLibredditTorRedirectsChecks,
+            redditHelper.getLibredditTorCustomRedirects,
+            redditHelper.setLibredditTorCustomRedirects
         )
-    })
 
-    commonHelper.processDefaultCustomInstances(
-        'libreddit',
-        'tor',
-        redditHelper,
-        document,
-        redditHelper.getLibredditTorRedirectsChecks,
-        redditHelper.setLibredditTorRedirectsChecks,
-        redditHelper.getLibredditTorCustomRedirects,
-        redditHelper.setLibredditTorCustomRedirects
-    )
-
-    browser.storage.local.get("tedditLatency").then(r => {
+        browser.storage.local.get("tedditLatency").then(r => {
+            commonHelper.processDefaultCustomInstances(
+                'teddit',
+                'normal',
+                redditHelper,
+                document,
+                redditHelper.getTedditNormalRedirectsChecks,
+                redditHelper.setTedditNormalRedirectsChecks,
+                redditHelper.getTedditNormalCustomRedirects,
+                redditHelper.setTedditNormalCustomRedirects,
+                r.tedditLatency,
+            );
+        })
+
         commonHelper.processDefaultCustomInstances(
             'teddit',
-            'normal',
+            'tor',
             redditHelper,
             document,
-            redditHelper.getTedditNormalRedirectsChecks,
-            redditHelper.setTedditNormalRedirectsChecks,
-            redditHelper.getTedditNormalCustomRedirects,
-            redditHelper.setTedditNormalCustomRedirects,
-            r.tedditLatency,
+            redditHelper.getTedditTorRedirectsChecks,
+            redditHelper.setTedditTorRedirectsChecks,
+            redditHelper.getTedditTorCustomRedirects,
+            redditHelper.setTedditTorCustomRedirects
         );
-    })
-
-    commonHelper.processDefaultCustomInstances(
-        'teddit',
-        'tor',
-        redditHelper,
-        document,
-        redditHelper.getTedditTorRedirectsChecks,
-        redditHelper.setTedditTorRedirectsChecks,
-        redditHelper.getTedditTorCustomRedirects,
-        redditHelper.setTedditTorCustomRedirects
-    );
-
-})
 
+    })
+}
+init();
 
 let latencyLibredditElement = document.getElementById("latency-libreddit");
 let latencyLibredditLabel = document.getElementById("latency-libreddit-label");
diff --git a/src/pages/options/twitter/twitter.js b/src/pages/options/twitter/twitter.js
index 4cb31643..bd611497 100644
--- a/src/pages/options/twitter/twitter.js
+++ b/src/pages/options/twitter/twitter.js
@@ -23,14 +23,13 @@ let muteVideos = document.getElementById('nitter').getElementsByClassName('muteV
 let autoplayGifs = document.getElementById('nitter').getElementsByClassName('autoplayGifs')[0];
 
 let nitterElement = document.getElementById("nitter");
-document.addEventListener("change", async _ => {
-    twitterHelper.setDisable(!disableTwitterElement.checked)
-    twitterHelper.setProtocol(protocolElement.value);
-    twitterHelper.setEnableCustomSettings(enableYoutubeCustomSettingsElement.checked);
-    twitterHelper.setBypassWatchOnTwitter(bypassWatchOnTwitterElement.checked);
-    changeProtocolSettings(protocolElement.value);
+document.addEventListener("change", async () => {
+    await browser.storage.local.set({
+        disableTwitter: !disableTwitterElement.checked,
+        twitterProtocol: protocolElement.value,
+        enableTwitterCustomSettings: enableYoutubeCustomSettingsElement.checked,
+        bypassWatchOnTwitter: bypassWatchOnTwitterElement.checked,
 
-    await twitterHelper.setSettings({
         // Display
         nitterTheme: theme.value,
         nitterInfiniteScroll: infiniteScroll.checked,
@@ -121,6 +120,8 @@ function init() {
 }
 init();
 
+window.onblur = twitterHelper.initNitterCookies;
+
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
 latencyElement.addEventListener("click",