Skip to content

Commit 1a8778e

Browse files
authored
Add files via upload
1 parent f9df118 commit 1a8778e

File tree

3 files changed

+94
-53
lines changed

3 files changed

+94
-53
lines changed

autoconfirm.js

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,51 @@
1-
// 1. Method: Set last time active all 10 minutes to now | Does probably not help
2-
setInterval(() => window._lact = Date.now(), 600000);
3-
4-
// 2. Method: Looks for popup and override pause button
1+
// Declare constants
52
const YTMusic = window.location.hostname === 'music.youtube.com';
63
const appName = YTMusic ? 'ytmusic-app' : 'ytd-app';
74
const popupEventNodename = YTMusic ? 'YTMUSIC-YOU-THERE-RENDERER' : 'YT-CONFIRM-DIALOG-RENDERER';
85
const popupContainer = YTMusic ? 'ytmusic-popup-container' : 'ytd-popup-container';
96
const videoElement = document.querySelector('video');
7+
const playButtonPause = YTMusic ? '#play-pause-button[title="Pause"]' : '.ytp-play-button[data-title-no-tooltip="Pause"]';
8+
const playButtonPlay = YTMusic ? '#play-pause-button[title="Play"]' : '.ytp-play-button[data-title-no-tooltip="Play"]';
9+
10+
// General functions
11+
function asDoubleDigit(value) {
12+
return value < 10 ? '0' + value : value;
13+
}
14+
function getTimestamp() {
15+
let dt = new Date();
16+
let time = asDoubleDigit(dt.getHours()) + ':' + asDoubleDigit(dt.getMinutes()) + ':' + asDoubleDigit(dt.getSeconds());
17+
return time;
18+
}
19+
function log(message) {
20+
console.log(`[YT-Nonstop | ${getTimestamp()}] ${message}`);
21+
}
22+
23+
// 1. Method: Set last time active all 10 minutes to now | Does probably not help
24+
setInterval(() => {
25+
window._lact = Date.now();
26+
log('Reset last time active');
27+
},
28+
600000);
1029

30+
// 2. Method: Looks for popup
1131
function listenForPopupEvent() {
1232
document.addEventListener('yt-popup-opened', (e) => {
1333
if (e.detail.nodeName === popupEventNodename) {
1434
document.querySelector(popupContainer).handleClosePopupAction_();
1535
videoElement.play();
36+
log('Popup hidden and video played again');
1637
}
1738
});
1839
}
19-
2040
listenForPopupEvent();
41+
42+
// 3. Method: Pause and UnPause after 30 minutes
43+
setInterval(() => {
44+
if (window.location.href.indexOf("/watch") == -1 ) return;
45+
if (playButtonPause) {
46+
document.querySelector(playButtonPause).click();
47+
document.querySelector(playButtonPlay).click();
48+
log('Paused and unpaused video');
49+
}
50+
},
51+
1800000);

autoskip.js

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "YT-Nonstop",
3-
"version": "2.1.0",
3+
"version": "2.2.0",
44
"description": "Deletes the annoying \"Video paused. Continue watching?\" popup on YouTube and keeps it running nonstop without autoplay message!",
55
"permissions": [ "declarativeContent", "storage", "tabs" ],
66
"host_permissions": [ "https://www.youtube.com/*", "https://music.youtube.com/*", "https://m.youtube.com/*" ],

0 commit comments

Comments
 (0)