2023-09-03 15:33:31 +00:00
|
|
|
let tabWhitelist = [];
|
|
|
|
|
2023-06-17 11:47:15 +00:00
|
|
|
// Einstellungen ziehen, ContentScript registrieren
|
2024-08-21 07:52:16 +00:00
|
|
|
browser.storage.local.get({
|
|
|
|
activated: true,
|
|
|
|
instance: "yewtu.be",
|
|
|
|
})
|
|
|
|
.then((storage) => {
|
|
|
|
if (storage.activated) {
|
|
|
|
activateBlocker();
|
|
|
|
} else {
|
|
|
|
deactivateBlocker();
|
|
|
|
}
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2024-08-21 07:52:16 +00:00
|
|
|
registerCS(storage.instance);
|
|
|
|
});
|
2023-06-17 11:47:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
// ContentScript für aktuelle Instanz registrieren
|
2024-08-21 07:52:16 +00:00
|
|
|
function registerCS(url) {
|
|
|
|
browser.contentScripts.register({
|
2023-09-03 15:33:31 +00:00
|
|
|
js: [{ file: "content.js" }],
|
|
|
|
matches: ["*://" + url + "/*"]
|
2023-06-17 11:47:15 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// pageAction anzeigen
|
|
|
|
browser.runtime.onMessage.addListener((data, sender) => {
|
2024-08-21 07:52:16 +00:00
|
|
|
if (data === "showYoutubePageAction") {
|
2023-09-03 15:33:31 +00:00
|
|
|
browser.pageAction.setIcon({
|
|
|
|
tabId: sender.tab.id,
|
|
|
|
path: "icons/youtube.png"
|
|
|
|
});
|
|
|
|
browser.pageAction.setTitle({
|
|
|
|
tabId: sender.tab.id,
|
|
|
|
title: "Open on YouTube"
|
|
|
|
});
|
2024-08-21 07:52:16 +00:00
|
|
|
|
|
|
|
} else if (data === "showInvidiousPageAction") {
|
2023-09-03 15:33:31 +00:00
|
|
|
browser.pageAction.setIcon({
|
|
|
|
tabId: sender.tab.id,
|
|
|
|
path: "icons/invidious.png"
|
|
|
|
});
|
|
|
|
browser.pageAction.setTitle({
|
|
|
|
tabId: sender.tab.id,
|
|
|
|
title: "Open on Invidious"
|
|
|
|
});
|
2023-06-17 11:47:15 +00:00
|
|
|
}
|
2023-09-03 15:33:31 +00:00
|
|
|
browser.pageAction.show(sender.tab.id);
|
2023-06-17 11:47:15 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
// Storage onChange listener
|
|
|
|
browser.storage.onChanged.addListener((changes) => {
|
2023-09-03 15:33:31 +00:00
|
|
|
if ("instance" in changes) {
|
|
|
|
registerCS(changes.instance.newValue);
|
|
|
|
}
|
|
|
|
if ("enabledBlock" in changes) {
|
|
|
|
enabledBlock = changes.enabledBlock.newValue;
|
|
|
|
}
|
2023-06-17 11:47:15 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// Wenn Icon geklickt wird Blocker de-/aktivieren
|
|
|
|
browser.browserAction.onClicked.addListener(() => {
|
|
|
|
browser.storage.local.get("activated").then((item) => {
|
|
|
|
if (item.activated) {
|
|
|
|
deactivateBlocker();
|
|
|
|
} else {
|
|
|
|
activateBlocker();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
function activateBlocker() {
|
2023-09-03 15:33:31 +00:00
|
|
|
browser.browserAction.setIcon({ path: "icons/invidious.png" });
|
|
|
|
browser.storage.local.set({ activated: true });
|
2023-06-17 11:47:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function deactivateBlocker() {
|
2023-09-03 15:33:31 +00:00
|
|
|
browser.browserAction.setIcon({ path: "icons/youtube.png" });
|
|
|
|
browser.storage.local.set({ activated: false });
|
2023-06-17 11:47:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Redirect
|
|
|
|
browser.webRequest.onBeforeRequest.addListener(async (details) => {
|
2023-09-03 15:33:31 +00:00
|
|
|
if (!tabWhitelist.includes(details.tabId)) {
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
let activated;
|
|
|
|
let instance;
|
|
|
|
|
|
|
|
await browser.storage.local.get({
|
|
|
|
activated: true,
|
|
|
|
instance: "yewtu.be",
|
|
|
|
}).then((item) => {
|
|
|
|
activated = item.activated;
|
|
|
|
instance = item.instance;
|
|
|
|
});
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
if (activated) {
|
|
|
|
const youtubeRegex = /youtube.com(\/?.*)/;
|
|
|
|
const youtubeShortRegex = /youtu.be\/.+/;
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
if (details.url.startsWith("https://img.youtube.com/vi")) {
|
|
|
|
console.log("JOOOOO");
|
|
|
|
return { redirectUrl: 'https://' + instance + '/vi/' + details.url.split("/vi/")[1].split("/")[0] + "/mqdefault.jpg" }
|
|
|
|
}
|
|
|
|
else if (youtubeRegex.test(details.url)) {
|
|
|
|
return { redirectUrl: 'https://' + instance + youtubeRegex.exec(details.url)[1] };
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
} else if (youtubeShortRegex.test(details.url)) {
|
|
|
|
const youtubeShortCaptureRegex = /youtu.be\/(.+)/;
|
|
|
|
return { redirectUrl: 'https://' + instance + '/watch?v=' + youtubeShortCaptureRegex.exec(details.url)[1] };
|
2023-06-17 11:47:15 +00:00
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
} else if (details.url.startsWith("https://www.youtube-nocookie.com/embed/")) {
|
|
|
|
return { redirectUrl: "https://" + instance + "/embed/" + details.url.split("/embed/")[1] };
|
|
|
|
}
|
2023-06-17 11:47:15 +00:00
|
|
|
}
|
|
|
|
}
|
2023-09-03 15:33:31 +00:00
|
|
|
},
|
2023-06-17 11:47:15 +00:00
|
|
|
{
|
|
|
|
urls: ['*://*.youtube.com/*', '*://*.youtu.be/*', '*://*.youtube-nocookie.com/*']
|
|
|
|
},
|
|
|
|
|
|
|
|
['blocking']
|
|
|
|
);
|
|
|
|
|
2023-09-03 15:33:31 +00:00
|
|
|
// URL Icon Click --> Open on YouTube/Invidious
|
|
|
|
browser.pageAction.onClicked.addListener((tab) => {
|
2024-08-21 07:52:16 +00:00
|
|
|
browser.storage.local.get({
|
|
|
|
activated: true,
|
|
|
|
instance: "yewtu.be"
|
|
|
|
})
|
|
|
|
.then(async (storage) => {
|
|
|
|
if (tab.url.includes("youtube")) {
|
|
|
|
browser.tabs.create({
|
|
|
|
url: "https://" + storage.instance + "/" + tab.url.split("/")[3]
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
const newTab = await browser.tabs.create({
|
|
|
|
url: "https://www.youtube.com/" + tab.url.split("/")[3]
|
|
|
|
});
|
|
|
|
if (!tabWhitelist.includes(newTab.id))
|
|
|
|
tabWhitelist.push(newTab.id);
|
2023-09-03 15:33:31 +00:00
|
|
|
}
|
2024-08-21 07:52:16 +00:00
|
|
|
});
|
2023-06-17 11:47:15 +00:00
|
|
|
});
|
2023-09-03 15:33:31 +00:00
|
|
|
|
|
|
|
// Close tab -> Remove from whitelist
|
|
|
|
browser.tabs.onRemoved.addListener((tabId) => {
|
2024-08-21 07:52:16 +00:00
|
|
|
if (tabWhitelist.includes(tabId))
|
2023-09-03 15:33:31 +00:00
|
|
|
tabWhitelist.splice(tabWhitelist.indexOf(tabId), 1);
|
|
|
|
});
|