Added autoRedirect off offline instances option

This commit is contained in:
ManeraKai 2022-03-09 22:52:58 +03:00
parent 619f675114
commit 04fcac3920
No known key found for this signature in database
GPG Key ID: 5ABC31FFD562E337
7 changed files with 105 additions and 6 deletions

View File

@ -29,7 +29,6 @@ let exceptions = {
"url": [],
"regex": [],
};
const getExceptions = () => exceptions;
function setExceptions(val) {
exceptions = val;
@ -37,6 +36,14 @@ function setExceptions(val) {
console.log("exceptions: ", val)
}
let autoRedirect;
const getAutoRedirect = () => autoRedirect;
function setAutoRedirect(val) {
autoRedirect = val;
browser.storage.local.set({ autoRedirect })
console.log("autoRedirect: ", val)
}
function isException(url) {
for (const item of exceptions.url) {
console.log(item, `${url.protocol}//${url.host}`)
@ -55,7 +62,8 @@ async function init() {
"alwaysUsePreferred",
"theme",
"applyThemeToSites",
"popupFrontends"
"popupFrontends",
"autoRedirect"
],
r => { // r = result
if (r.exceptions) exceptions = r.exceptions;
@ -78,6 +86,9 @@ async function init() {
"wikipedia",
"medium",
];
autoRedirect = r.autoRedirect ?? false;
resolve();
}
)
@ -114,6 +125,9 @@ export default {
getExceptions,
setExceptions,
getAutoRedirect,
setAutoRedirect,
getAlwaysUsePreferred,
setAlwaysUsePreferred,

View File

@ -110,6 +110,52 @@ browser.tabs.onRemoved.addListener((tabId) => {
}
});
browser.webRequest.onResponseStarted.addListener(
details => {
console.log("onResponseStarted");
let autoRedirect = generalHelper.getAutoRedirect();
if (!autoRedirect) return null;
if (details.statusCode >= 500) {
const url = new URL(details.url);
let newUrl;
newUrl = youtubeHelper.changeInstance(url);
if (!newUrl) newUrl = twitterHelper.changeInstance(url);
if (!newUrl) newUrl = instagramHelper.changeInstance(url);
if (!newUrl) newUrl = redditHelper.changeInstance(url);
if (!newUrl) newUrl = searchHelper.changeInstance(url);
if (!newUrl) newUrl = translateHelper.changeInstance(url);
if (!newUrl) newUrl = mediumHelper.changeInstance(url);
if (!newUrl) newUrl = imgurHelper.changeInstance(url);
if (!newUrl) newUrl = wikipediaHelper.changeInstance(url)
if (newUrl) {
browser.tabs.update({ url: '../errors/instance_offline.html' });
setTimeout(() => browser.tabs.update({ url: newUrl }), 2000);
}
}
},
{ urls: ["<all_urls>"], }
)
browser.tabs.onUpdated.addListener(
(tabId, changeInfo, _) => {
let url;

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Instance is offline</title>
<link href="../stylesheets/styles.css" rel="stylesheet" />
<style>
body {
height: 100vh;
width: 100vw;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
}
</style>
</head>
<body>
This instance is offline, you'll be redirected after&nbsp;<span id="number">2</span>&nbsp;seconds
<script src="instance_offline.js"></script>
</body>
</html>

View File

@ -0,0 +1,2 @@
setTimeout(() => document.getElementById("number").innerHTML = '1', 1000);
setTimeout(() => document.getElementById("number").innerHTML = '0', 2000);

View File

@ -109,6 +109,11 @@
<input id="always-use-preferred" type="checkbox" checked />
</div>
<div class="some-block option-block">
<h4>Auto Redirect of offline instances</h4>
<input id="auto-redirect" type="checkbox" checked />
</div>
<div class="some-block option-block">
<h4>Exceptions</h4>
</div>

View File

@ -62,6 +62,11 @@ alwaysUsePreferredElement.addEventListener("change",
event => generalHelper.setAlwaysUsePreferred(event.target.checked)
);
let autoRedirectElement = document.getElementById("auto-redirect")
autoRedirectElement.addEventListener("change",
event => generalHelper.setAutoRedirect(event.target.checked)
);
let applyThemeToSitesElement = document.getElementById("apply-theme-to-sites")
applyThemeToSitesElement.addEventListener("change",
event => generalHelper.setApplyThemeToSites(event.target.checked)
@ -92,7 +97,7 @@ for (const frontend of generalHelper.allPopupFrontends)
generalHelper.init().then(() => {
alwaysUsePreferredElement.checked = generalHelper.getAlwaysUsePreferred();
console.log("alwaysUsePreferredElement.checked", alwaysUsePreferredElement.checked);
autoRedirectElement.checked = generalHelper.getAutoRedirect();
themeElement.value = generalHelper.getTheme();
applyThemeToSitesElement.checked = generalHelper.getApplyThemeToSites();
instanceTypeElement.addEventListener("change",

View File

@ -164,11 +164,9 @@ let popupFrontends;
generalHelper.init().then(() => {
popupFrontends = generalHelper.getPopupFrontends();
for (const frontend of generalHelper.allPopupFrontends) {
console.log(frontend)
for (const frontend of generalHelper.allPopupFrontends)
if (!popupFrontends.includes(frontend))
document.getElementById(frontend).classList.add("hide")
else
document.getElementById(frontend).classList.remove("hide")
}
});