@@ -93,6 +93,28 @@ var ImprovedTube = {
9393 defaultApiKey : 'AIzaSyCXRRCFwKAXOiF1JkUBmibzxJF1cPuKNwA'
9494} ;
9595
96+ ImprovedTube . syncAutoplayDisableLocalStorage = function ( ) {
97+ if ( ImprovedTube . storage . player_autoplay_disable === true ) {
98+ localStorage [ 'it-player-autoplay-disable' ] = 'true' ;
99+ } else {
100+ localStorage . removeItem ( 'it-player-autoplay-disable' ) ;
101+ }
102+ } ;
103+
104+ ImprovedTube . shouldPreventInitialAutoplay = function ( video ) {
105+ if ( ImprovedTube . user_interacted || ! location . href . includes ( '/watch?' ) || location . href . includes ( 'list=' ) ) {
106+ return false ;
107+ }
108+
109+ if ( localStorage [ 'it-player-autoplay-disable' ] !== 'true' && ImprovedTube . storage . player_autoplay_disable !== true ) {
110+ return false ;
111+ }
112+
113+ var player = video . closest && ( video . closest ( '.html5-video-player' ) || video . closest ( '#movie_player' ) ) ;
114+
115+ return ! player || ! player . classList || ! player . classList . contains ( 'ad-showing' ) ;
116+ } ;
117+
96118/*--------------------------------------------------------------
97119CODEC || 30FPS
98120----------------------------------------------------------------
@@ -125,6 +147,29 @@ if (localStorage['it-codec'] || localStorage['it-player30fps']) {
125147 }
126148} ;
127149
150+ HTMLMediaElement . prototype . play = ( function ( original ) {
151+ if ( original . improvedTubeInitialAutoplayGuard ) {
152+ return original ;
153+ }
154+
155+ function play ( ) {
156+ if ( ImprovedTube . shouldPreventInitialAutoplay ( this ) ) {
157+ try {
158+ this . pause ( ) ;
159+ } catch ( error ) {
160+ }
161+
162+ return Promise . resolve ( ) ;
163+ }
164+
165+ return original . apply ( this , arguments ) ;
166+ }
167+
168+ play . improvedTubeInitialAutoplayGuard = true ;
169+
170+ return play ;
171+ } ) ( HTMLMediaElement . prototype . play ) ;
172+
128173/*--------------------------------------------------------------
129174# MESSAGES
130175----------------------------------------------------------------
@@ -182,6 +227,7 @@ document.addEventListener('it-message-from-extension', function () {
182227
183228 if ( message . action === 'storage-loaded' ) {
184229 ImprovedTube . storage = message . storage ;
230+ ImprovedTube . syncAutoplayDisableLocalStorage ( ) ;
185231
186232 if ( ImprovedTube . storage . block_vp9 || ImprovedTube . storage . block_av1 || ImprovedTube . storage . block_h264 ) {
187233 let atlas = { block_vp9 : 'vp9|vp09' , block_h264 : 'avc1' , block_av1 : 'av01' } ,
@@ -233,6 +279,9 @@ document.addEventListener('it-message-from-extension', function () {
233279 localStorage . removeItem ( 'it-player30fps' ) ;
234280 }
235281 }
282+ if ( message . key === 'player_autoplay_disable' ) {
283+ ImprovedTube . syncAutoplayDisableLocalStorage ( ) ;
284+ }
236285 switch ( camelized_key ) {
237286 case 'blocklist' :
238287 case 'blocklistActivate' :
0 commit comments