@@ -29,76 +29,86 @@ let YTNonstop = (function YTNonstop(options) {
2929 // .getPlayerState(): -1 = unstarted, 0 = ended, 1 = playing, 2 = paused, 3 = buffering, 5 = video cued
3030 // if video ended ---> skip to next video
3131 const skip = ( ) => {
32- if ( autotube . getIsAutoSkip ( ) == true && player ( ) . getPlayerState ( ) === 0 ) {
33- player ( ) . setAutonav ( true ) ;
32+ if ( player ( ) . getPlayerState ( ) === 0 && ! YTMusic ) {
33+ const overlay = document . querySelector ( '.ytp-autonav-endscreen-countdown-overlay[style="display: none;"]' ) ;
34+ const play = document . querySelector ( '.ytp-autonav-endscreen-upnext-play-button' ) ;
35+ const cancel = document . querySelector ( '.ytp-autonav-endscreen-upnext-cancel-button' ) ;
3436
35- const playList = player ( ) . getPlaylist ( ) ;
36- const currentIndex = player ( ) . getPlaylistIndex ( ) ;
37- const loop = document . querySelector ( '#playlist-action-menu ytd-playlist-loop-button-renderer button[aria-label] path[d="M20,14h2v5L5.84,19.02l1.77,1.77l-1.41,1.41L1.99,18l4.21-4.21l1.41,1.41l-1.82,1.82L20,17V14z M4,7l14.21-0.02l-1.82,1.82 l1.41,1.41L22.01,6l-4.21-4.21l-1.41,1.41l1.77,1.77L2,5v6h2V7z"]' )
38- || document . querySelector ( '#playlist-action-menu ytd-playlist-loop-button-renderer button[aria-label] path[d="M13,15h-1.37v-4.52l-1.3,0.38v-1L12.83,9H13V15z M20,17L5.79,17.02l1.82-1.82l-1.41-1.41L1.99,18l4.21,4.21l1.41-1.41 l-1.77-1.77L22,19v-5h-2V17z M4,7l14.21-0.02l-1.82,1.82l1.41,1.41L22.01,6l-4.21-4.21l-1.41,1.41l1.77,1.77L2,5v6h2V7z"]' ) ;
39- const shuffle = document . querySelector ( '#playlist-action-menu ytd-toggle-button-renderer button[aria-label][aria-pressed="true"]' ) ;
40-
41- if ( playList === null || playList === undefined ) {
42- return player ( ) . nextVideo ( ) ;
43- } else
44- if ( loop || shuffle ) {
37+ if ( overlay ) {
38+ log ( 'Return skip; autonav-endscreen is not visible.' ) ;
4539 return ;
46- } else {
47- playList . length - 1 == currentIndex
48- ? player ( ) . nextVideo ( )
49- : player ( ) . playVideoAt ( currentIndex + 1 ) ;
40+ } else
41+ if ( autotube . getIsAutoSkip ( ) == true ) {
42+ play . click ( ) ;
43+ log ( 'Skipped to next video' ) ;
44+ } else
45+ if ( autotube . getIsAutoSkip ( ) == false ) {
46+ // player().setAutonav(false);
47+ cancel . click ( ) ;
48+ document . querySelector ( '.ytp-autonav-endscreen-countdown-overlay' ) . remove ( ) ;
49+ log ( 'Canceled next video' ) ;
5050 }
51- } else {
52- player ( ) . setAutonav ( false ) ;
5351 }
5452 }
5553
54+ const autonav_button = ( ) => {
55+ const autonav_on = document . querySelector ( '.ytp-autonav-toggle-button-container > .ytp-autonav-toggle-button[aria-checked="true"]' )
56+ || document . querySelector ( '#automix[role="button"][aria-pressed="true"]' ) ;
57+ const autonav_off = document . querySelector ( '.ytp-autonav-toggle-button-container > .ytp-autonav-toggle-button[aria-checked="false"]' )
58+ || document . querySelector ( '#automix[role="button"][aria-pressed="false"]' ) ;
59+
60+ if ( autotube . getIsAutoSkip ( ) == true && autonav_off ) {
61+ autonav_off . click ( ) ;
62+ log ( 'Enabled autoplay/autonav' ) ;
63+ } else
64+ if ( autotube . getIsAutoSkip ( ) == false && autonav_on ) {
65+ autonav_on . click ( ) ;
66+ log ( 'Disabled autoplay/autonav' ) ;
67+ }
68+ }
69+
70+ const autonav_button_style = ( ) => {
71+ const autonav = document . querySelector ( '.ytp-button[data-tooltip-target-id="ytp-autonav-toggle-button"]' )
72+ || document . querySelector ( 'ytmusic-app .autoplay.ytmusic-tab-renderer' ) ;
73+
74+ autonav . setAttribute ( "style" , "height:0px; width:0px; opacity:0" ) ;
75+ log ( 'Hide autoplay/autonav, since the button is overriden' ) ;
76+ }
77+
5678 function run ( ) {
5779 const play_button = {
58- getButton : window . document . querySelector ( '.ytp-play-button.ytp-button' ) || window . document . getElementById ( 'play-pause-button' ) ,
80+ getButton : window . document . querySelector ( '.ytp-play-button.ytp-button' )
81+ || window . document . getElementById ( 'play-pause-button' ) ,
5982 config : { attributes : true , childList : true , subtree : true } ,
6083 callback : ( mutationsList , observer ) => {
6184 skip ( ) ;
6285 }
6386 }
6487
65- const autoplay_button = {
66- getButton : window . document . querySelector ( '#movie_player .ytp-progress-bar' )
67- || window . document . querySelector ( '#movie_player .ytmusic-player-bar#progress-bar' ) ,
68- config : { attributes : true } ,
69- callback : ( mutationsList , observer ) => {
70- loadSettings . setButton ( ) ;
71- }
72- }
73-
7488 const loadSettings = {
75- setInterval : setInterval ( ( ) => {
89+ setSettings : setInterval ( ( ) => {
7690 if ( window . location . href . indexOf ( "/watch" ) == - 1 ) return ;
7791
7892 // set play button observer
79- const play_button_observer = new MutationObserver ( play_button . callback ) ;
80- play_button_observer . observe ( play_button . getButton , play_button . config ) ;
93+ try {
94+ const play_button_observer = new MutationObserver ( play_button . callback ) ;
95+ play_button_observer . observe ( play_button . getButton , play_button . config ) ;
96+ } catch ( e ) {
97+ log ( 'Play button does not exist; reload page' ) ;
98+ window . location . reload ( ) ;
99+ }
81100
82101 // set autonav button
83- const autoplay_button_observer = new MutationObserver ( autoplay_button . callback ) ;
84- autoplay_button_observer . observe ( autoplay_button . getButton , autoplay_button . config ) ;
102+ autonav_button ( ) ;
103+ autonav_button_style ( ) ;
85104
86- clearInterval ( loadSettings . setInterval ) ;
105+ clearInterval ( loadSettings . setSettings ) ;
87106 } , 1000 ) ,
88107
89- setButton : function ( ) {
90- const autonav_on = document . querySelector ( '.ytp-autonav-toggle-button-container > .ytp-autonav-toggle-button[aria-checked="true"]' )
91- || document . querySelector ( '#automix[role="button"][aria-pressed="true"]' ) ;
92- const autonav_off = document . querySelector ( '.ytp-autonav-toggle-button-container > .ytp-autonav-toggle-button[aria-checked="false"]' )
93- || document . querySelector ( '#automix[role="button"][aria-pressed="false"]' ) ;
94-
95- if ( autotube . getIsAutoSkip ( ) == true && autonav_off ) {
96- autonav_off . click ( ) ;
97- } else
98- if ( autotube . getIsAutoSkip ( ) == false && autonav_on ) {
99- autonav_on . click ( ) ;
100- }
101- }
108+ setAutonavButton : setInterval ( ( ) => {
109+ if ( window . location . href . indexOf ( "/watch" ) == - 1 ) return ;
110+ autonav_button ( ) ;
111+ } , 5000 )
102112 }
103113
104114 return autotube ;
0 commit comments