@@ -24,38 +24,61 @@ let YTNonstop = (function YTNonstop(options) {
2424 // setters
2525 setAutoSkip : function ( value ) { return autotube . _autoSkip = value } ,
2626 }
27- const player = ( ) => document . getElementById ( 'movie_player' ) ;
27+ const YTMusic = window . location . hostname === 'music.youtube.com' ;
28+ const videoPlayer = document . getElementById ( 'movie_player' ) ;
29+
30+ function getTimestamp ( ) {
31+ return new Date ( ) . toLocaleTimeString ( ) ;
32+ }
33+ function log ( message ) {
34+ console . log ( `[YT-Nonstop | ${ getTimestamp ( ) } ] ${ message } ` ) ;
35+ }
2836
2937 // .getPlayerState(): -1 = unstarted, 0 = ended, 1 = playing, 2 = paused, 3 = buffering, 5 = video cued
30- // if video ended ---> skip to next video
38+ // if video paused ---> play video
39+ const play = ( ) => {
40+ const popupEventNodename = YTMusic ? document . querySelector ( 'YTMUSIC-YOU-THERE-RENDERER' ) :
41+ document . querySelector ( 'YT-CONFIRM-DIALOG-RENDERER' ) ;
42+ const popupContainer = YTMusic ? document . getElementsByTagName ( 'ytmusic-popup-container' ) [ 0 ] :
43+ document . getElementsByTagName ( 'ytd-popup-container' ) [ 0 ] ;
44+
45+ if ( videoPlayer . getPlayerState ( ) === 2 && popupEventNodename ) {
46+ videoPlayer . playVideo ( ) ;
47+ popupContainer . remove ( ) ;
48+ log ( 'Popup hidden and video played again' ) ;
49+ }
50+ }
51+
52+ // if video ended ---> skip to next video
3153 const skip = ( ) => {
32- if ( player ( ) . getPlayerState ( ) === 0 && ! YTMusic ) {
54+ if ( videoPlayer . getPlayerState ( ) === 0 && ! YTMusic ) {
3355 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' ) ;
36-
37- if ( overlay ) {
38- log ( 'Return skip; autonav-endscreen is not visible.' ) ;
39- return ;
40- } else
41- if ( autotube . getIsAutoSkip ( ) == true ) {
42- play . click ( ) ;
56+ const overlay_v = document . getElementsByClassName ( 'ytp-autonav-endscreen-countdown-overlay' ) [ 0 ] ;
57+ const next = document . getElementsByClassName ( 'ytp-autonav-endscreen-upnext-play-button' ) [ 0 ] ;
58+ const cancel = document . getElementsByClassName ( 'ytp-autonav-endscreen-upnext-cancel-button' ) [ 0 ] ;
59+ const autonav_off = document . querySelector ( '.ytp-autonav-toggle-button-container > .ytp-autonav-toggle-button[aria-checked="false"]' ) ;
60+
61+ if ( autotube . getIsAutoSkip ( ) == true && ( ! overlay || autonav_off ) ) {
62+ // videoPlayer.setAutonav(true);
63+ // videoPlayer.nextVideo();
64+ overlay_v . remove ( ) ;
65+ next . click ( ) ;
4366 log ( 'Skipped to next video' ) ;
4467 } else
45- if ( autotube . getIsAutoSkip ( ) == false ) {
46- // player().setAutonav(false);
68+ if ( autotube . getIsAutoSkip ( ) == false && ! overlay ) {
69+ // videoPlayer.setAutonav(false);
70+ overlay_v . remove ( ) ;
4771 cancel . click ( ) ;
48- document . querySelector ( '.ytp-autonav-endscreen-countdown-overlay' ) . remove ( ) ;
4972 log ( 'Canceled next video' ) ;
5073 }
5174 }
5275 }
5376
5477 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"]' ) ;
78+ const autonav_on = YTMusic ? document . querySelector ( '#automix[role=" button"] [aria-pressed ="true"]' ) :
79+ document . querySelector ( '.ytp-autonav-toggle- button-container > .ytp-autonav-toggle-button [aria-checked ="true"]' ) ;
80+ const autonav_off = YTMusic ? document . querySelector ( '#automix[role=" button"] [aria-pressed ="false"]' ) :
81+ document . querySelector ( '.ytp-autonav-toggle- button-container > .ytp-autonav-toggle-button [aria-checked ="false"]' ) ;
5982
6083 if ( autotube . getIsAutoSkip ( ) == true && autonav_off ) {
6184 autonav_off . click ( ) ;
@@ -68,19 +91,20 @@ let YTNonstop = (function YTNonstop(options) {
6891 }
6992
7093 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 ' ) ;
94+ const autonav = YTMusic ? document . getElementsByClassName ( 'autoplay' ) [ 1 ] :
95+ document . querySelector ( '.ytp-button[data-tooltip-target-id="ytp-autonav-toggle-button"] ' ) ;
7396
7497 autonav . setAttribute ( "style" , "height:0px; width:0px; opacity:0" ) ;
7598 log ( 'Hide autoplay/autonav, since the button is overriden' ) ;
7699 }
77100
78101 function run ( ) {
79102 const play_button = {
80- getButton : window . document . querySelector ( '. ytp-play-button. ytp-button')
103+ getButton : window . document . getElementsByClassName ( ' ytp-play-button ytp-button') [ 0 ]
81104 || window . document . getElementById ( 'play-pause-button' ) ,
82105 config : { attributes : true , childList : true , subtree : true } ,
83106 callback : ( mutationsList , observer ) => {
107+ play ( ) ;
84108 skip ( ) ;
85109 }
86110 }
@@ -108,7 +132,22 @@ let YTNonstop = (function YTNonstop(options) {
108132 setAutonavButton : setInterval ( ( ) => {
109133 if ( window . location . href . indexOf ( "/watch" ) == - 1 ) return ;
110134 autonav_button ( ) ;
111- } , 5000 )
135+ } , 5000 ) ,
136+
137+ // Autoplay Method 1: Set last time active all 20 minutes to now
138+ // Autoplay Method 2: If video paused and popup visible ---> play video
139+ // Autoplay Method 3: Pause and UnPause after 20 minutes
140+ setOtherMethods : setInterval ( ( ) => {
141+ if ( window . location . href . indexOf ( "/watch" ) == - 1 ) return ;
142+ window . _lact = Date . now ( ) ;
143+ log ( 'Reset last time active' ) ;
144+ play ( ) ;
145+ // if (videoPlayer.getPlayerState() === 1) {
146+ // videoPlayer.pauseVideo();
147+ // videoPlayer.playVideo();
148+ // log('Paused and unpaused video');
149+ // }
150+ } , 600000 )
112151 }
113152
114153 return autotube ;
0 commit comments