From 90a1b5894c40b63962e4c661f84c72fb6573021a Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 01:35:57 +0200 Subject: [PATCH 01/12] Update core.js typo in comment, missing semicolon, spaces to tabs --- js&css/web-accessible/core.js | 84 +++++++++++++++++------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/js&css/web-accessible/core.js b/js&css/web-accessible/core.js index b41a525bb..d818dd578 100644 --- a/js&css/web-accessible/core.js +++ b/js&css/web-accessible/core.js @@ -69,22 +69,22 @@ var ImprovedTube = { /*-------------------------------------------------------------- CODEC || 30FPS ---------------------------------------------------------------- - Do not move, needs to be on top of first injected content - file to patch HTMLMediaElement before YT player uses it. + Do not move, needs to be on top of first injected content + file to patch HTMLMediaElement before YT player uses it. --------------------------------------------------------------*/ if (localStorage['it-codec'] || localStorage['it-player30fps']) { function overwrite(self, callback, mime) { - if (localStorage['it-codec']) { - var re = new RegExp(localStorage['it-codec']); - // /webm|vp8|vp9/av01/ - if (re.test(mime)) return ''; - } - if (localStorage['it-player30fps']) { - var match = /framerate=(\d+)/.exec(mime); - if (match && match[1] > 30) return ''; - } + if (localStorage['it-codec']) { + var re = new RegExp(localStorage['it-codec']); + // /webm|vp8|vp9|av01/ + if (re.test(mime)) return ''; + } + if (localStorage['it-player30fps']) { + var match = /framerate=(\d+)/.exec(mime); + if (match && match[1] > 30) return ''; + } return callback.call(self, mime); - } + }; if (window.MediaSource) { var isTypeSupported = window.MediaSource.isTypeSupported; @@ -151,38 +151,38 @@ document.addEventListener('it-message-from-extension', function () { if (message.action === 'storage-loaded') { ImprovedTube.storage = message.storage; - - if (ImprovedTube.storage.player_h264) { - localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; - } else { - localStorage.removeItem('it-codec'); - } - if (!ImprovedTube.storage.player_60fps) { - localStorage['it-player30fps'] = true; - } else { - localStorage.removeItem('it-player30fps'); - } + + if (ImprovedTube.storage.player_h264) { + localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; + } else { + localStorage.removeItem('it-codec'); + } + if (!ImprovedTube.storage.player_60fps) { + localStorage['it-player30fps'] = true; + } else { + localStorage.removeItem('it-player30fps'); + } -// FEEDBACK WHEN THE USER CHANGED A SETTING +// FEEDBACK WHEN THE USER CHANGED A SETTING ImprovedTube.init(); } else if (message.action === 'storage-changed') { var camelized_key = message.camelizedKey; ImprovedTube.storage[message.key] = message.value; - if(message.key==="player_h264"){ - if (ImprovedTube.storage.player_h264) { - localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; - } else { - localStorage.removeItem('it-codec'); - } - } - if(message.key==="player_60fps"){ - if (!ImprovedTube.storage.player_60fps) { - localStorage['it-player30fps'] = true; - } else { - localStorage.removeItem('it-player30fps'); - } - } + if(message.key==="player_h264"){ + if (ImprovedTube.storage.player_h264) { + localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; + } else { + localStorage.removeItem('it-codec'); + } + } + if(message.key==="player_60fps"){ + if (!ImprovedTube.storage.player_60fps) { + localStorage['it-player30fps'] = true; + } else { + localStorage.removeItem('it-player30fps'); + } + } if(ImprovedTube.storage[message.key]==="when_paused"){ ImprovedTube.whenPaused(); }; @@ -195,20 +195,20 @@ document.addEventListener('it-message-from-extension', function () { ImprovedTube.setTheme(); } else if (camelized_key === 'description') { if (ImprovedTube.storage.description === "expanded" || ImprovedTube.storage.description === "classic_expanded" ) - {try{document.querySelector("#more").click() || document.querySelector("#expand").click() ;} catch{} } + {try{document.querySelector("#more").click() || document.querySelector("#expand").click() ;} catch{} } if (ImprovedTube.storage.description === "normal" || ImprovedTube.storage.description === "classic" ) {try{document.querySelector("#less").click() || document.querySelector("#collapse").click();} catch{}} ImprovedTube.improvedtubeYoutubeButtonsUnderPlayer(); } - else if (camelized_key === 'transcript') { - if (ImprovedTube.storage.transcript === true) {try{document.querySelector('*[target-id*=transcript]').removeAttribute('visibility');}catch{} + else if (camelized_key === 'transcript') { + if (ImprovedTube.storage.transcript === true) {try{document.querySelector('*[target-id*=transcript]').removeAttribute('visibility');}catch{} } if (ImprovedTube.storage.transcript === false){try{document.querySelector('*[target-id*=transcript] #visibility-button button').click();}catch{}} } else if (camelized_key === 'chapters') { if (ImprovedTube.storage.chapters === true){try{document.querySelector('*[target-id*=chapters]').removeAttribute('visibility');}catch{} } if (ImprovedTube.storage.chapters === false){try{document.querySelector('*[target-id*=chapters] #visibility-button button').click();}catch{}} } - else if (camelized_key === 'commentsSidebar') { + else if (camelized_key === 'commentsSidebar') { if(ImprovedTube.storage.comments_sidebar === false) {document.querySelector("#below").appendChild(document.querySelector("#comments")); document.querySelector("#secondary").appendChild(document.querySelector("#related")); } From d19aa5ce15d6d2736bfcecb970af254141a8ac9e Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 03:15:40 +0200 Subject: [PATCH 02/12] Update player.js alignment, spaces to tabs --- menu/skeleton-parts/player.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index 18dd3496f..bce767a22 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -53,47 +53,47 @@ extension.skeleton.main.layers.section.player.on.click = { value: true, storage: 'player_autoplay' }, - autopause_when_switching_tabs: { + autopause_when_switching_tabs: { component: 'switch', text: 'autopauseWhenSwitchingTabs', storage: 'player_autopause_when_switching_tabs', - on: { click: function () { setTimeout(() => { - + on: { click: function () { setTimeout(() => { + if (satus.storage.get('player_autopause_when_switching_tabs')) { if (satus.storage.get('only_one_player_instance_playing')) { this.nextSibling.click(); } } }, "250"); } - } + } }, - only_one_player_instance_playing: { + only_one_player_instance_playing: { component: 'switch', text: 'onlyOnePlayerInstancePlaying', on: { - click: function () { setTimeout(() => { + click: function () { setTimeout(() => { if (satus.storage.get('only_one_player_instance_playing')) { if (satus.storage.get('player_autopause_when_switching_tabs')) { this.previousSibling.click(); } } - }, "250"); } - } + }, "250"); } + } }, - player_autoPip: { + player_autoPip: { component: 'switch', text: 'autoPip', value: false, on: { - click: function () { setTimeout(() => { + click: function () { setTimeout(() => { if (satus.storage.get('player_autoPip')) { if (satus.storage.get('player_autopause_when_switching_tabs')) { this.previousSibling.click(); } } - }, "250"); } - } - }, + }, "250"); } + } + }, quality: { component: 'select', text: 'quality', @@ -177,7 +177,7 @@ extension.skeleton.main.layers.section.player.on.click = { component: 'switch', text: 'autoFullscreen', storage: 'player_autofullscreen' - }, + }, subtitles: { component: 'button', text: 'subtitles', @@ -938,7 +938,7 @@ extension.skeleton.main.layers.section.player.on.click = { value: 'av1-vp8-vp9' } ] - + }, player_60fps: { component: 'switch', From 30be349c33e8297dc45426ad2a5fe7df9d90ec3c Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 03:37:20 +0200 Subject: [PATCH 03/12] Update player.js more code alignment --- menu/skeleton-parts/player.js | 54 +++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index bce767a22..64690ea26 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -57,42 +57,48 @@ extension.skeleton.main.layers.section.player.on.click = { component: 'switch', text: 'autopauseWhenSwitchingTabs', storage: 'player_autopause_when_switching_tabs', - on: { click: function () { setTimeout(() => { - - if (satus.storage.get('player_autopause_when_switching_tabs')) { - if (satus.storage.get('only_one_player_instance_playing')) { - this.nextSibling.click(); - } + on: { + click: function () { + setTimeout(() => { + if (satus.storage.get('player_autopause_when_switching_tabs')) { + if (satus.storage.get('only_one_player_instance_playing')) { + this.nextSibling.click(); } - }, "250"); } - } + } + }, "250"); + } + } }, only_one_player_instance_playing: { component: 'switch', text: 'onlyOnePlayerInstancePlaying', - on: { - click: function () { setTimeout(() => { - if (satus.storage.get('only_one_player_instance_playing')) { - if (satus.storage.get('player_autopause_when_switching_tabs')) { - this.previousSibling.click(); - } + on: { + click: function () { + setTimeout(() => { + if (satus.storage.get('only_one_player_instance_playing')) { + if (satus.storage.get('player_autopause_when_switching_tabs')) { + this.previousSibling.click(); } - }, "250"); } - } + } + }, "250"); + } + } }, player_autoPip: { component: 'switch', text: 'autoPip', value: false, - on: { - click: function () { setTimeout(() => { - if (satus.storage.get('player_autoPip')) { - if (satus.storage.get('player_autopause_when_switching_tabs')) { - this.previousSibling.click(); - } + on: { + click: function () { + setTimeout(() => { + if (satus.storage.get('player_autoPip')) { + if (satus.storage.get('player_autopause_when_switching_tabs')) { + this.previousSibling.click(); } - }, "250"); } - } + } + }, "250"); + } + } }, quality: { component: 'select', From 674912c5a701ce333afcf936c932ba565ed1988c Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 03:41:00 +0200 Subject: [PATCH 04/12] Update player.js 'up next autoplay' moved next to autoplay, quality moved next to codec options --- menu/skeleton-parts/player.js | 88 +++++++++++++++++------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index 64690ea26..111e807e3 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -53,6 +53,11 @@ extension.skeleton.main.layers.section.player.on.click = { value: true, storage: 'player_autoplay' }, + up_next_autoplay: { + component: 'switch', + text: 'upNextAutoplay', + value: true + }, autopause_when_switching_tabs: { component: 'switch', text: 'autopauseWhenSwitchingTabs', @@ -100,45 +105,6 @@ extension.skeleton.main.layers.section.player.on.click = { } } }, - quality: { - component: 'select', - text: 'quality', - options: [{ - text: 'auto', - value: 'auto' - }, { - text: '144p', - value: 'tiny' - }, { - text: '240p', - value: 'small' - }, { - text: '360p', - value: 'medium' - }, { - text: '480p', - value: 'large' - }, { - text: '720p', - value: 'hd720' - }, { - text: '1080p', - value: 'hd1080' - }, { - text: '1440p', - value: 'hd1440' - }, { - text: '2160p', - value: 'hd2160' - }, { - text: '2880p', - value: 'hd2880' - }, { - text: '4320p', - value: 'highres' - }], - storage: 'player_quality' - }, player_forced_volume: { component: 'switch', text: 'forcedVolume', @@ -838,15 +804,49 @@ extension.skeleton.main.layers.section.player.on.click = { value: true, storage: 'player_crop_chapter_titles' }, - up_next_autoplay: { - component: 'switch', - text: 'upNextAutoplay', - value: true - }, mini_player: { component: 'switch', text: 'customMiniPlayer' }, + quality: { + component: 'select', + text: 'quality', + options: [{ + text: 'auto', + value: 'auto' + }, { + text: '144p', + value: 'tiny' + }, { + text: '240p', + value: 'small' + }, { + text: '360p', + value: 'medium' + }, { + text: '480p', + value: 'large' + }, { + text: '720p', + value: 'hd720' + }, { + text: '1080p', + value: 'hd1080' + }, { + text: '1440p', + value: 'hd1440' + }, { + text: '2160p', + value: 'hd2160' + }, { + text: '2880p', + value: 'hd2880' + }, { + text: '4320p', + value: 'highres' + }], + storage: 'player_quality' + }, h264: { component: 'switch', text: 'codecH264', From e3d67d02f1f89658af40d3774b0284ee68e9b32c Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 13:40:53 +0200 Subject: [PATCH 05/12] Update player.js added helper modal function, "Codec h.264" sets "Codecs", "Codecs" disable "Codec h.264" --- menu/skeleton-parts/player.js | 113 +++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 36 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index 111e807e3..d682db3ea 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -37,6 +37,39 @@ extension.skeleton.main.layers.section.player = { } }; +/*-------------------------------------------------------------- +# ModalHelper +--------------------------------------------------------------*/ + +function ModalHelper(where, ok, cancel) { + satus.render({ + component: 'modal', + + message: { + component: 'text', + text: 'youtubeLimitsVideoQualityTo1080pForH264Codec' + }, + actions: { + component: 'section', + variant: 'actions', + + ok: { + component: 'button', + text: 'OK', + on: { + click: ok + } + }, + cancel: { + component: 'button', + text: 'cancel', + on: { + click: cancel + } + } + } + }, where.parentNode.parentNode.parentNode); +}; /*-------------------------------------------------------------- # SECTION @@ -855,38 +888,19 @@ extension.skeleton.main.layers.section.player.on.click = { click: function () { if (this.dataset.value === 'true') { var component = this; - satus.render({ - component: 'modal', - - message: { - component: 'text', - text: 'youtubeLimitsVideoQualityTo1080pForH264Codec' - }, - actions: { - component: 'section', - variant: 'actions', - - cancel: { - component: 'button', - text: 'cancel', - on: { - click: function () { - component.click(); - this.parentNode.parentNode.parentNode.close() - } - } - }, - ok: { - component: 'button', - text: 'OK', - on: { - click: function () { - this.parentNode.parentNode.parentNode.close() - } - } - } + ModalHelper(this, function(){ + satus.storage.set('block_vp8', true); + satus.storage.set('block_vp9', true); + satus.storage.set('block_av1', true); + this.parentNode.parentNode.parentNode.close(); + satus.storage.set('block_h264', false); + }, + function(){ + component.click(); + if (this.componentName) { + this.parentNode.parentNode.parentNode.close(); } - },this.parentNode.parentNode.parentNode); + }); } } } @@ -899,22 +913,49 @@ extension.skeleton.main.layers.section.player.on.click = { section: { component: 'section', variant: 'card', - block_h264: { component: 'switch', - text: 'blockH264' + text: 'blockH264', + on: { + click: function () { + if (this.dataset.value === 'true' && satus.storage.get('player_h264')) { + satus.storage.set('player_h264', false); + } + } + } }, block_vp8: { component: 'switch', - text: 'blockVp8' + text: 'blockVp8', + on: { + click: function () { + if (this.dataset.value === 'false' && satus.storage.get('player_h264')) { + satus.storage.set('player_h264', false); + } + } + } }, block_vp9: { component: 'switch', - text: 'blockVp9' + text: 'blockVp9', + on: { + click: function () { + if (this.dataset.value === 'false' && satus.storage.get('player_h264')) { + satus.storage.set('player_h264', false); + } + } + } }, block_av1: { component: 'switch', - text: 'blockAv1' + text: 'blockAv1', + on: { + click: function () { + if (this.dataset.value === 'false' && satus.storage.get('player_h264')) { + satus.storage.set('player_h264', false); + } + } + } } } } From 415deefbbc8aadb5b7ee8e67502e3802dbe2bad8 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 13:46:38 +0200 Subject: [PATCH 06/12] Update satus.js Improved modal dialog handling, clicking outside tries to Cancel, previously clicking outside just force removed dialog. --- js&css/satus.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/js&css/satus.js b/js&css/satus.js index 4e64db981..ff9a82066 100644 --- a/js&css/satus.js +++ b/js&css/satus.js @@ -1110,6 +1110,16 @@ satus.components.modal = function(component, skeleton) { component.close = function() { var component = this; + component.close = function(outside) { + var component = this; + + //try calling cancel when clicked outside of modal dialog + if (outside) { + //not sure if bug free so better trap this for now + try { if (skeleton.actions.cancel.on.click) skeleton.actions.cancel.on.click(); } + catch(err){console.log(err);} + } + this.classList.add('satus-modal--closing'); setTimeout(function() { @@ -1120,7 +1130,8 @@ satus.components.modal = function(component, skeleton) { }; component.scrim.addEventListener('click', function() { - this.parentNode.close(); + //this is someone clicking outside of modal dialog + this.parentNode.close(true); }); if (satus.isset(skeleton.content)) { From 811c612707863fd4664a48a135a86b056651d608 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Wed, 3 May 2023 14:22:19 +0200 Subject: [PATCH 07/12] Update satus.js fixing previous commit duplicate lines --- js&css/satus.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/js&css/satus.js b/js&css/satus.js index ff9a82066..fbc8189e3 100644 --- a/js&css/satus.js +++ b/js&css/satus.js @@ -1107,9 +1107,6 @@ satus.components.modal = function(component, skeleton) { component.scrim = component.createChildElement('div', 'scrim'); component.surface = component.createChildElement('div', 'surface'); - component.close = function() { - var component = this; - component.close = function(outside) { var component = this; From 3bd48581ecf7a852fc2c22fe67b6a806e75477d3 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Thu, 4 May 2023 01:07:16 +0200 Subject: [PATCH 08/12] Update core.js removing "block_vp8", YT doesnt use it anymore. "Codecs" works now, can pick individual codecs to block. --- js&css/web-accessible/core.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/js&css/web-accessible/core.js b/js&css/web-accessible/core.js index d818dd578..43e843752 100644 --- a/js&css/web-accessible/core.js +++ b/js&css/web-accessible/core.js @@ -152,13 +152,15 @@ document.addEventListener('it-message-from-extension', function () { if (message.action === 'storage-loaded') { ImprovedTube.storage = message.storage; - if (ImprovedTube.storage.player_h264) { - localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; + if (ImprovedTube.storage.block_vp9 || ImprovedTube.storage.block_av1 || ImprovedTube.storage.block_h264) { + let atlas = {block_vp9:'vp9|vp09', block_h264:'avc1', block_av1:'av01'} + localStorage['it-codec'] = Object.keys(atlas).reduce(function (all, key) { + return ImprovedTube.storage[key] ? ((all?all+'|':'') + atlas[key]) : all}, ''); } else { localStorage.removeItem('it-codec'); } if (!ImprovedTube.storage.player_60fps) { - localStorage['it-player30fps'] = true; + localStorage['it-player30fps'] = true; } else { localStorage.removeItem('it-player30fps'); } @@ -169,10 +171,11 @@ document.addEventListener('it-message-from-extension', function () { var camelized_key = message.camelizedKey; ImprovedTube.storage[message.key] = message.value; - if(message.key==="player_h264"){ - if (ImprovedTube.storage.player_h264) { - localStorage['it-codec'] = "/webm|vp8|vp9|av01/"; - } else { + if(['block_vp9', 'block_h264', 'block_av1'].includes(message.key)){ + let atlas = {block_vp9:'vp9|vp09', block_h264:'avc1', block_av1:'av01'} + localStorage['it-codec'] = Object.keys(atlas).reduce(function (all, key) { + return ImprovedTube.storage[key] ? ((all?all+'|':'') + atlas[key]) : all}, ''); + if (!localStorage['it-codec']) { localStorage.removeItem('it-codec'); } } From 909e92affc30708c0383bd1919fc21642c87da02 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Thu, 4 May 2023 01:09:12 +0200 Subject: [PATCH 09/12] Update player.js removed block_vp8 --- menu/skeleton-parts/player.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index d682db3ea..6558c760f 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -889,7 +889,6 @@ extension.skeleton.main.layers.section.player.on.click = { if (this.dataset.value === 'true') { var component = this; ModalHelper(this, function(){ - satus.storage.set('block_vp8', true); satus.storage.set('block_vp9', true); satus.storage.set('block_av1', true); this.parentNode.parentNode.parentNode.close(); @@ -924,17 +923,6 @@ extension.skeleton.main.layers.section.player.on.click = { } } }, - block_vp8: { - component: 'switch', - text: 'blockVp8', - on: { - click: function () { - if (this.dataset.value === 'false' && satus.storage.get('player_h264')) { - satus.storage.set('player_h264', false); - } - } - } - }, block_vp9: { component: 'switch', text: 'blockVp9', From 23aa7e854e488f59a61100c199018d1cad67fe81 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Thu, 4 May 2023 07:48:17 +0200 Subject: [PATCH 10/12] Update player.js more work on ModalHelper, popup warnings for disabling all video decoders. --- menu/skeleton-parts/player.js | 37 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index 6558c760f..55de58219 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -41,13 +41,13 @@ extension.skeleton.main.layers.section.player = { # ModalHelper --------------------------------------------------------------*/ -function ModalHelper(where, ok, cancel) { +function ModalHelper(where, what, ok, cancel) { satus.render({ component: 'modal', message: { component: 'text', - text: 'youtubeLimitsVideoQualityTo1080pForH264Codec' + text: what }, actions: { component: 'section', @@ -57,14 +57,23 @@ function ModalHelper(where, ok, cancel) { component: 'button', text: 'OK', on: { - click: ok + click: function () { + ok(); + this.parentNode.parentNode.parentNode.close(); + } } }, cancel: { component: 'button', text: 'cancel', on: { - click: cancel + click: function () { + where.click(); + cancel(); + if (this.componentName) { + this.parentNode.parentNode.parentNode.close(); + } + } } } } @@ -887,18 +896,12 @@ extension.skeleton.main.layers.section.player.on.click = { on: { click: function () { if (this.dataset.value === 'true') { - var component = this; - ModalHelper(this, function(){ + ModalHelper(this, 'youtubeLimitsVideoQualityTo1080pForH264Codec', function(){ satus.storage.set('block_vp9', true); satus.storage.set('block_av1', true); - this.parentNode.parentNode.parentNode.close(); satus.storage.set('block_h264', false); }, function(){ - component.click(); - if (this.componentName) { - this.parentNode.parentNode.parentNode.close(); - } }); } } @@ -920,6 +923,12 @@ extension.skeleton.main.layers.section.player.on.click = { if (this.dataset.value === 'true' && satus.storage.get('player_h264')) { satus.storage.set('player_h264', false); } + if (this.dataset.value === 'true' && satus.storage.get('block_vp9')) { + ModalHelper(this, 'You need either VP9 or H264 enabled for Youtube to work. Disabling both will break Video.', function(){ + }, + function(){ + }); + } } } }, @@ -931,6 +940,12 @@ extension.skeleton.main.layers.section.player.on.click = { if (this.dataset.value === 'false' && satus.storage.get('player_h264')) { satus.storage.set('player_h264', false); } + if (this.dataset.value === 'true' && satus.storage.get('block_h264')) { + ModalHelper(this, 'You need either VP9 or H264 enabled for Youtube to work. Disabling both will break Video.', function(){ + }, + function(){ + }); + } } } }, From 7a25a59c590c4f1da8c99321660d191487ec2c65 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Thu, 4 May 2023 13:53:15 +0200 Subject: [PATCH 11/12] Update player.js more h264/codec interaction work, now switching one automatically updates another. Preliminary optimize_codec_for_hardware_acceleration implementation. Needs a list of GPUs with supported hardware codecs. --- menu/skeleton-parts/player.js | 103 ++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 24 deletions(-) diff --git a/menu/skeleton-parts/player.js b/menu/skeleton-parts/player.js index 55de58219..b54c64929 100644 --- a/menu/skeleton-parts/player.js +++ b/menu/skeleton-parts/player.js @@ -38,7 +38,8 @@ extension.skeleton.main.layers.section.player = { }; /*-------------------------------------------------------------- -# ModalHelper +# ModalHelper, like satus.components.modal.confirm but lets you + pass callback functions --------------------------------------------------------------*/ function ModalHelper(where, what, ok, cancel) { @@ -895,14 +896,30 @@ extension.skeleton.main.layers.section.player.on.click = { storage: 'player_h264', on: { click: function () { + //always refresh player_codecs element when clicking here + let skeleton = this.parentNode.skeleton; + refresh = function () { + skeleton.player_codecs.list.rendered.dispatchEvent(new CustomEvent('refresh')); + skeleton.optimize_codec_for_hardware_acceleration.list.rendered.dispatchEvent(new CustomEvent('refresh')); + } if (this.dataset.value === 'true') { ModalHelper(this, 'youtubeLimitsVideoQualityTo1080pForH264Codec', function(){ satus.storage.set('block_vp9', true); satus.storage.set('block_av1', true); satus.storage.set('block_h264', false); + refresh(); }, function(){ + satus.storage.set('block_vp9', false); + satus.storage.set('block_av1', false); + satus.storage.set('block_h264', false); + refresh(); }); + } else { + satus.storage.set('block_vp9', false); + satus.storage.set('block_av1', false); + satus.storage.set('block_h264', false); + refresh(); } } } @@ -910,6 +927,9 @@ extension.skeleton.main.layers.section.player.on.click = { player_codecs: { component: 'button', text: 'codecs', + style: { + justifyContent: 'space-between' + }, on: { click: { section: { @@ -962,33 +982,68 @@ extension.skeleton.main.layers.section.player.on.click = { } } } + }, + list: { + component: 'span', + style: { + opacity: .64 + }, + on: { + refresh: function () { this.skeleton.on.render() }, + render: function () { + var codecs = (satus.storage.get('block_h264') ? '' : 'h.264 ') + (satus.storage.get('block_vp9') ? '' : 'vp9 ') + (satus.storage.get('block_av1') ? '' : 'av1'); + var here = this.parentObject ? this.parentObject.rendered : this; + + if (codecs) { + here.style = ''; + here.textContent = codecs; + } else { + here.style = 'color: red!important; font-weight: bold;'; + here.textContent = 'none'; + } + } + } } }, - avoid_cpu_rendering_when_possible: { - component: 'select', - text: 'avoidCpuRenderingWhenPossible', - options: [{ - text: 'disabled', - value: 'disabled' - }, - { - text: 'auto', - value: 'auto' - }, - { - text: 'avoidAv1', - value: 'av1' - }, - { - text: 'avoidAv1Vp9', - value: 'av1-vp9' - }, - { - text: 'avoidAv1Vp8Vp9', - value: 'av1-vp8-vp9' + optimize_codec_for_hardware_acceleration: { + component: 'button', + text: 'Optimize Codec for hardware acceleration', + style: { + justifyContent: 'space-between' + }, + on: { + click: function () { + //put some code here } - ] + }, + list: { + component: 'span', + style: { + opacity: .64 + }, + on: { + refresh: function () { this.skeleton.on.render() }, + render: function () { + // put some code here looking up GPU capabilities and comparing to currrent codec selection + var codecs = (satus.storage.get('block_h264') ? '' : 'h.264 ') + (satus.storage.get('block_vp9') ? '' : 'vp9 ') + (satus.storage.get('block_av1') ? '' : 'av1'); + var here = this.parentObject ? this.parentObject.rendered : this; + if (1) { // todo + here.style = ''; + here.textContent = 'Feature not yet available'; + } else if (2) { // todo + here.style = ''; + here.textContent = 'unknown GPU'; + } else if (codecs) { + here.style = 'color: greenimportant; font-weight: bold;'; + here.textContent = 'Optimal'; + } else { + here.style = 'color: red!important; font-weight: bold;'; + here.textContent = 'Not optimal'; + } + } + } + } }, player_60fps: { component: 'switch', From 0e6cd7cc70327a1177b68e1c7d0bc54d312d17a7 Mon Sep 17 00:00:00 2001 From: Rasz_pl Date: Thu, 4 May 2023 22:36:17 +0200 Subject: [PATCH 12/12] player.js issues/1666 fix, when quality not available try the closest one instead of highest --- .../web-accessible/www.youtube.com/player.js | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/js&css/web-accessible/www.youtube.com/player.js b/js&css/web-accessible/www.youtube.com/player.js index fa8bb954f..9f9a01ed1 100644 --- a/js&css/web-accessible/www.youtube.com/player.js +++ b/js&css/web-accessible/www.youtube.com/player.js @@ -376,6 +376,19 @@ ImprovedTube.playerAutofullscreen = function () { QUALITY ------------------------------------------------------------------------------*/ ImprovedTube.playerQuality = function () { + function closest (num, arr) { + let curr = arr[0]; + let diff = Math.abs (num - curr); + for (let val = 0; val < arr.length; val++) { + let newdiff = Math.abs (num - arr[val]); + if (newdiff < diff) { + diff = newdiff; + curr = arr[val]; + } + } + return curr; + }; + var player = this.elements.player, quality = this.storage.player_quality; @@ -384,7 +397,14 @@ ImprovedTube.playerQuality = function () { if (quality && quality !== 'auto') { if (available_quality_levels.includes(quality) === false) { - quality = available_quality_levels[0]; + let label = ['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres']; + let resolution = ['144', '240', '360', '480', '720', '1080', '1440', '2160', '2880', '4320']; + let availableresolutions = available_quality_levels.reduce(function (array, elem) { + array.push(resolution[label.indexOf(elem)]); return array; + }, []); + + quality = closest (resolution[label.indexOf(quality)], availableresolutions); + quality = label[resolution.indexOf(quality)]; } player.setPlaybackQualityRange(quality);