mirror of
https://github.com/ION606/browser-chromium.git
synced 2026-05-14 22:26:56 +00:00
65 lines
2.1 KiB
JavaScript
65 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();
|
|
|