Files
browser-chromium/JS/optimize.js
T
2024-11-04 11:55:14 -05:00

64 lines
2.1 KiB
JavaScript

async function waitForVideo() {
return new Promise(resolve => {
const i = setInterval(() => {
if (document.querySelector('video')) {
clearInterval(i);
resolve(true);
}
}, 500)
});
}
async function revertQuality() {
setQuality(document?.body?.dataset?.oldel || 'auto');
delete document?.body?.dataset?.oldel;
}
async function setQuality(quality = 'lowest') {
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
await waitForVideo();
console.info(`changing quality to ${quality}`);
const qualityMenuMain = [document.querySelector('.ytp-settings-menu'), document.querySelector('.ytp-panel-menu')],
settingsButton = document.querySelector('.ytp-settings-button');
qualityMenuMain.map(el => el.style.opacity = '0');
settingsButton.click();
await sleep(500);
const qualityMenu = document.querySelector('.ytp-panel-menu').lastElementChild;
qualityMenu.click();
await sleep(500);
const qualityOptions = [...document.querySelector('.ytp-panel.ytp-quality-menu').querySelectorAll('.ytp-menuitem')];
let selection;
if (quality === 'lowest') selection = qualityOptions.findLast(el => (!el.textContent.toLowerCase().includes('auto')));
else selection = qualityOptions.find((el) => el.textContent.toLowerCase().includes(quality));
const currentQuality = qualityOptions.find(el => el.ariaChecked);
if (currentQuality) document.body.dataset.oldel = currentQuality.textContent.toLowerCase();
if (!selection) {
let qualityTexts = qualityOptions.map((el) => el.textContent).join('\n');
console.info('"' + quality + '" not found. Options are: \n\nHighest\n' + qualityTexts + '\n' + 'setting to auto');
settingsButton.click(); // click the menu button to close it
selection = qualityOptions.findLast(el => (el.textContent.toLowerCase().includes('auto')));
}
selection.click();
qualityMenuMain.map(el => el.style.opacity = '1');
}
function optimize() {
sessionStorage.setItem('ran-optimize', 1);
console.info('quality tuning script loaded!');
// setQuality('Highest');
}
if (document.readyState === 'complete' && !sessionStorage.getItem('ran-optimize')) optimize();
else window.addEventListener('DOMContentLoaded', optimize);