This repository has been archived on 2024-07-03. You can view files and clone it, but cannot push or open issues or pull requests.
lunk/chrome-extension/background.js

71 lines
1.4 KiB
JavaScript

let EXT_SWITCH = true;
chrome.storage.sync.get('globalOnOffSwitch', ({globalOnOffSwitch}) => {
EXT_SWITCH = globalOnOffSwitch ?? true;
});
chrome.storage.onChanged.addListener((changes, _) => {
for (let [key, { oldValue, newValue }] of Object.entries(changes)) {
if (key === 'globalOnOffSwitch') {
EXT_SWITCH = newValue;
}
}
});
/* CONNECTION */
const WS_IP = 'localhost';
const WS_PORT = 40022;
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
const makeWSConnection = async () => {
const ws = new WebSocket(`ws://${WS_IP}:${WS_PORT}/`);
ws.onopen = e => console.log(`Connected to ${e.target.url}`);
ws.onclose = e => console.log(`Disconnected from ${e.target.url}`);
while (ws.readyState != WebSocket.OPEN)
await sleep(5);
return ws
}
let WS = (async () => await makeWSConnection())();
const sendToOpener = async cmd => {
if (WS.readystate != WebSocket.OPEN)
WS = await makeWSConnection();
WS.send(cmd);
}
/* URL INTERCEPTION */
const URLS = [
"*://*.youtube.com/watch*"
];
const interceptLink = details => {
if (!EXT_SWITCH)
return {};
try {
console.log(details);
sendToOpener(`mpv '${details.url}'`);
}
catch (e) {
console.error(e);
}
finally {
return {redirectUrl: 'javascript:'};
}
}
chrome.webRequest.onBeforeRequest.addListener(
interceptLink,
{
urls: URLS,
types: ['main_frame']
},
["blocking", "requestBody"]
);