// ==UserScript==
// @name burning series enhancer
// @name:en burning series enhancer
// @icon https://bs.to/favicon.ico
// @author xtrars
// @description Wechselt automatisch zum VOE- oder Vupload-Tab auf burning series und öffnet VOE oder Vupload. Das Tool startet das nächste Video und falls nötig die nächste Staffel, wenn eine Episode beendet wurde.
// @description:en Automatically switches to the VOE or Vupload tab on burning series and opens VOE or Vupload. The tool starts the next video and if necessary the next season when an episode is finished.
// @version 8.11
// @run-at document-body
// @license GPL-3.0-or-later
// @namespace https://greasyfork.org/users/140785
// @compatible chrome Chrome
// @compatible firefox Firefox
// @compatible opera Opera
// @compatible edge Edge
// @compatible safari Safari
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @grant GM_download
// @grant GM_info
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant window.close
// @grant window.focus
// @match https://bs.to/*
// @match https://burningseries.co/*
// @match https://burningseries.sx/*
// @match https://burningseries.vc/*
// @match https://burningseries.ac/*
// @match https://burningseries.cx/*
// @match https://burningseries.nz/*
// @match https://burningseries.se/*
// @match https://vivo.sx/*
// @match https://vivo.st/*
// @match https://vupload.com/*
// @match https://*.vivo.sx/*
// @match https://*.vivo.st/*
// @match https://*.megaupload.to/*
// @match https://*.housecardsummerbutton.com/*
// @include /^https:\/\/(v-*o-*e|[-unblock\d]){3,15}\.[a-z]{2,3}\/.*/
// @require https://unpkg.com/video.js@latest/dist/video.min.js
// @require https://unpkg.com/hls.js@latest/dist/hls.min.js
// @require https://unpkg.com/plyr@3.7.2/dist/plyr.min.js
// ==/UserScript==
class BaseHandler {
waitForElement(sSelector, bWaitUnlimited = true) {
return new Promise(async resolve => {
if (document.querySelector(sSelector)) {
return resolve(document.querySelector(sSelector));
}
const observer = new MutationObserver(() => {
if (document.querySelector(sSelector)) {
resolve(document.querySelector(sSelector));
observer.disconnect();
}
});
if (document.body) {
observer.observe(document.body, {
childList: true, subtree: true,
});
}
if (!bWaitUnlimited) {
setTimeout(() => {
resolve(document.querySelector(sSelector));
observer.disconnect();
}, 3000);
}
});
}
hasUrl(aSelector) {
let isAvailable = true;
for (let selector of aSelector) {
isAvailable = document['location']['href'].search(selector) !== -1;
if (!isAvailable) {
return false;
}
}
return true;
}
reload(iDelay = 300) {
setTimeout(() => {
window.location.reload();
}, iDelay);
}
querySelectorAllRegex(sSelector = '*', sAttribute = 'name', rRegex = /.*/) {
for (const eElement of document.querySelectorAll(sSelector)) {
if (rRegex.test(eElement[sAttribute])) {
return eElement;
}
}
return false;
}
}
class BurningSeriesHandler extends BaseHandler {
initGMVariables() {
if (typeof GM_getValue('bActivateEnhancer') === "undefined") {
GM_setValue('bActivateEnhancer', false);
}
if (typeof GM_getValue('bAutoplayNextEpisode') === "undefined") {
GM_setValue('bAutoplayNextEpisode', true);
}
if (typeof GM_getValue('bAutoplayVideo') === "undefined") {
GM_setValue('bAutoplayVideo', true);
}
if (typeof GM_getValue('bAutoplayNextSeason') === "undefined") {
GM_setValue('bAutoplayNextSeason', true);
}
if (typeof GM_getValue('bAutoplayRandomEpisode') === "undefined") {
GM_setValue('bAutoplayRandomEpisode', false);
}
if (typeof GM_getValue('bDownloadVideo') === "undefined") {
GM_setValue('bDownloadVideo', false);
}
if (typeof GM_getValue('bExtraSettings') === "undefined") {
GM_setValue('bExtraSettings', false);
}
if (typeof GM_getValue('bDownloadType') === "undefined") {
GM_setValue('bDownloadType', true);
}
if (typeof GM_getValue('bFirstStart') === "undefined") {
GM_setValue('bDownloadType', true);
}
if (typeof GM_getValue('bSelectHoster') === "undefined") {
GM_setValue('bSelectHoster', 'voe');
}
if (typeof GM_getValue('bSkipStart') === "undefined") {
GM_setValue('bSkipStart', false);
}
if (typeof GM_getValue('bSkipEnd') === "undefined") {
GM_setValue('bSkipEnd', false);
}
if (typeof GM_getValue('bSkipEndTime') === "undefined") {
GM_setValue('bSkipEndTime', 0);
}
if (typeof GM_getValue('bSkipStartTime') === "undefined") {
GM_setValue('bSkipStartTime', 0);
}
}
hasAnotherHoster() {
return this.hasUrl([/^https:\/\/(bs.to|burningseries.[a-z]{2,3})\/.*[0-9]{1,3}\/[0-9]{1,3}-.*\/[a-z]+\/(?!Vivo|Vupload|VOE).*/g]);
}
isEpisode() {
return this.hasUrl([/^https:\/\/(bs.to|burningseries.[a-z]{2,3})/g, /[0-9]{1,3}\/[0-9]{1,3}-/g]);
}
async clickPlay() {
return new Promise(async resolve => {
let playerElem = await this.waitForElement('section.serie .hoster-player').catch(() => {
});
let iNumberOfClicks = 0;
let clickInterval = setInterval(async () => {
if (playerElem) {
if (document.querySelector('section.serie .hoster-player > a') ||
document.querySelector('section.serie .hoster-player > iframe') ||
iNumberOfClicks > 120 ||
this.querySelectorAllRegex('iframe', 'title', /recaptcha challenge/)) {
clearInterval(clickInterval);
resolve();
}
iNumberOfClicks++;
let clickEvent = new Event('click');
clickEvent.which = 1;
clickEvent.pageX = 6;
clickEvent.pageY = 1;
playerElem.dispatchEvent(clickEvent);
}
}, 500);
});
}
playNextEpisodeIfVideoEnded(bSetEvent = true) {
if (!bSetEvent) {
GM_removeValueChangeListener('isLocalVideoEnded');
return;
}
GM_addValueChangeListener('isLocalVideoEnded', () => {
if (GM_getValue('isLocalVideoEnded')) {
GM_setValue('isLocalVideoEnded', false);
window.focus();
if (GM_getValue('bAutoplayRandomEpisode')) {
let oRandomEpisode = document.querySelector('#sp_right > a');
document['location'].replace(oRandomEpisode.href);
}
else {
let oNextEpisode = document.querySelector('.serie .frame ul li[class^="e"].active ~ li:not(.disabled) a');
if (oNextEpisode) {
document['location'].replace(oNextEpisode.href);
}
else if (GM_getValue('bAutoplayNextSeason')) {
let oNextSeason = document.querySelector('.serie .frame ul li[class^="s"].active ~ li:not(.disabled) a');
if (oNextSeason) {
GM_setValue('clickFirstSeason', true);
document.location.replace(oNextSeason);
}
}
}
}
});
}
appendOwnStyle() {
const style = document.createElement('style');
style.innerHTML = `<style>
:root {
--inner-pl: 14px;
--inner-bc-before: #2FB536;
--inner-bc-after: #12A6F6;
--color: white;
}
.xtrars-donate {
background-color:#12a6f6;
border-radius:21px;
border:1px solid #11a4e3;
display:inline-block;
cursor:pointer;
font-weight:bold;
padding:3px 12px;
text-decoration:none;
color: white;
}
.xtrars-donate:hover {
text-decoration:none;
background-color:#11a4e3;
}
button.tab {
background-color: transparent;
color: white;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 10px;
padding-top: 7px;
user-select: none;
}
@keyframes shake {
10%, 90% {transform: translate3d(-.5px, 0, 0);}
20%, 80% {transform: translate3d(1px, 0, 0);}
30%, 50%, 70% {transform: translate3d(-2px, 0, 0);}
40%, 60% {transform: translate3d(2px, 0, 0);}
}
.onoffswitch {
z-index: 161;
position: relative; width: 100%;
}
.onoffswitch-label {
width: calc(100% - 20px);
display: block;
overflow: hidden;
float: left;
}
.onoffswitch-label.switcher {
width: calc(100% - 7px);
}
.onoffswitch-inner {
display: inline-block; width: 200%; margin-left: -100%;
transition: margin 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
margin-left: 0;
}
.onoffswitch-checkbox.disabled {
pointer-events: none;
-webkit-user-select: none; /* Safari */
user-select: none; /* Standard syntax */
}
.onoffswitch-inner:before, .onoffswitch-inner:after {
display: block;
float: left;
width: 50%;
padding-left: 10px;
font-size: 10px;
font-family: Trebuchet, Arial, sans-serif;
box-sizing: border-box;
}
#xtrars-btn {
float: right;
background: #12a6f6;
border-radius: 50%;
width: 70px;
height: 70px;
line-height: 81px;
text-align: center;
cursor: pointer;
animation: shake 1s ease 1s 1 normal;
}
#xtrars-menu {
right: 4;
}
#xtrars-btn-icon {
color: var(--color);
width: 70px;
height: 70px;
display: inline-block;
background: no-repeat center url('data:image/png;base64,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');
background-size: contain;
clip-path: circle(34px at center);
}
.onoffswitch-checkbox {
float: left;
margin-top: 3px;
cursor: pointer;
}
.onoffswitch.disabled {
color: grey;
}
.xtrars-switch {
position: relative;
display: inline-block;
width: 30px;
height: 17px;
margin-top: 6px;
margin-left: 10px;
}
.xtrars-switch input {
opacity: 0;
width: 0;
height: 0;
}
.xtrars-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.xtrars-slider:before {
position: absolute;
content: "";
height: 13px;
width: 15px;
left: 2px;
bottom: 2px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .xtrars-slider {
background-color: #669900;
}
input:focus + .xtrars-slider {
box-shadow: 0 0 1px #669900;
}
input:checked + .xtrars-slider:before {
transform: translateX(11px);
}
.onoffswitch-inner.autoplay:before {
content: "Video-Autoplay aktiviert";
}
.onoffswitch-inner.autoplay:after {
content: "Video-Autoplay deaktiviert";
}
.onoffswitch-inner.auto-next-episode:before {
content: "Nächste Episode wird automatisch abgespielt";
}
.onoffswitch-inner.auto-next-episode:after {
content: "Nächste Episode wird manuell abgespielt";
}
.onoffswitch-inner.enable-enhancer:before {
content: "burning series enhancer aktiviert";
}
.onoffswitch-inner.enable-enhancer:after {
content: "burning series enhancer deaktiviert";
}
.onoffswitch-inner.auto-next-season:before {
content: "Nächste Staffel wird automatisch abgespielt";
}
.onoffswitch-inner.auto-next-season:after {
content: "Nächste Staffel wird manuell abgespielt";
}
.onoffswitch-inner.auto-random-episode:before {
content: "Nächste folgende Episode wird abgespielt";
}
.onoffswitch-inner.auto-random-episode:after {
content: "Nächste Episode wird zufällig abgespielt";
}
.onoffswitch-inner.download:before {
content: "Downloadfunktion aktiviert";
}
.onoffswitch-inner.download:after {
content: "Downloadfunktion deaktiviert";
}
.onoffswitch-inner.download-type:before {
content: "Video wird heruntergeladen & Stream angeschaut";
}
.onoffswitch-inner.download-type:after {
content: "Video wird heruntergeladen & Stream geschlossen";
}
.onoffswitch-inner.skip-start:before {
content: "Anfang des Videos wird x Sekunden übersprungen";
}
.onoffswitch-inner.skip-start:after {
content: "Video spielt von Anfang an";
}
.onoffswitch-inner.skip-end:before {
content: "Video wird x Sekunden vor Ende beendet";
}
.onoffswitch-inner.skip-end:after {
content: "Video spielt bis zum Ende";
}
.disabled:after {
background-color: darkgrey !important;
}
.disabled:before {
background-color: darkgrey !important;
}
.hidden {
visibility: hidden !important;
}
.xtrars-tabcontent::-webkit-scrollbar {
width: 10px;
}
.xtrars-tabcontent::-webkit-scrollbar-track {
background: #fdfdfd;
}
.xtrars-tabcontent::-webkit-scrollbar-thumb {
background: #12a6f6;
}
.xtrars-tabcontent::-webkit-scrollbar-thumb:hover {
background: #0296d6;
}
.xtrars-tabcontent {
display: none;
padding: 10px;
width: 100%;
height: calc(100% - 60px);
overflow: auto;
}
.xtrars-active {
text-shadow: -0.3px 0 #12a6f6, 0.3px 0 #12a6f6 !important;
color: #12a6f6 !important;
background-color: rgb(253, 253, 253) !important;
}
#xtrars-settings-toolbar {
height: 30px;
width: 100%;
background-color: #12a6f6;
color: white;
line-height: 30px;
}
.xtrars-toolbar-text {
display: inline-block;
margin-left: 10px;
user-select: none;
width: calc(100% - 125px);
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.xtrars-select {
display: inline;
font-size: 10px;
padding: 0 8px;
border-radius: 0;
outline: none;
}
/*Thanks to Aaron Iker https://codepen.io/aaroniker/pen/XyXzYp*/
.xtrars-search {
display: inline-table;
float: right;
margin-right: 10px;
}
.xtrars-search input {
box-shadow: none;
border-radius: 0;
-moz-border-radius: 0;
-webkit-border-radius: 0;
background: none;
border: none;
outline: none;
width: 14px;
min-width: 0;
padding: 0;
z-index: 1;
position: relative;
line-height: 10px;
margin: 8px 0;
font-size: 12px;
-webkit-appearance: none;
transition: all 0.6s ease;
cursor: pointer;
color: #fff;
}
.xtrars-search input + div {
position: relative;
height: 14px;
width: 100%;
margin: -21px 0 0 0;
}
.xtrars-search input + div svg {
display: block;
position: absolute;
height: 14px;
width: 79px;
right: 0;
top: 0;
fill: none;
stroke: #fff;
stroke-width: 1.5px;
stroke-dashoffset: 271.908;
stroke-dasharray: 59 212.908;
transition: all 0.6s ease;
}
.xtrars-search input:not(:-moz-placeholder-shown) {
width: 80px;
padding: 0 4px;
cursor: text;
}
.xtrars-search input:not(:-ms-input-placeholder) {
width: 80px;
padding: 0 4px;
cursor: text;
}
.xtrars-search input:not(:placeholder-shown), .xtrars-search input:focus {
width: 80px;
padding: 0 4px;
cursor: text;
}
.xtrars-search input:not(:-moz-placeholder-shown) + div svg {
stroke-dasharray: 150 212.908;
stroke-dashoffset: 300;
}
.xtrars-search input:not(:-ms-input-placeholder) + div svg {
stroke-dasharray: 150 212.908;
stroke-dashoffset: 300;
}
.xtrars-search input:not(:placeholder-shown) + div svg, .xtrars-search input:focus + div svg {
stroke-dasharray: 150 212.908;
stroke-dashoffset: 300;
}`.replace('<style>', '');
document.head.appendChild(style);
}
async buildButton() {
const button = document.createElement("div");
button.id = 'xtrars-btn';
button.innerHTML = '<i id="xtrars-btn-icon"></i>';
await this.waitForElement('.infos').catch(() => {
});
document.getElementsByClassName('infos')[0]
.insertBefore(button, document.getElementsByClassName('infos')[0].firstChild);
}
buildSettingsWindow() {
const settingsWindow = document.createElement("div");
settingsWindow.innerHTML = `
<div id="xtrars-settings-toolbar">
<div class="xtrars-toolbar-text">burning series enhancer - Settings</div>
<button id="xtrars-settings-close-btn" style="user-select: none; float: right; margin-top: 6px; background-color: transparent; border: none;
margin-right: 10px; cursor: pointer; font-weight: bolder; color: white;" onclick="closeSettingsWindow">✕</button>
<div class="xtrars-search">
<input class="xtrars-search-input" type="text" placeholder=" ">
<div>
<svg>
<use xlink:href="#path">
</svg>
</div>
</div>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 28" id="path">
<path d="M32.9418651,-20.6880772 C37.9418651,-20.6880772 40.9418651,-16.6880772 40.9418651,-12.6880772 C40.9418651,-8.68807717 37.9418651,-4.68807717 32.9418651,-4.68807717 C27.9418651,-4.68807717 24.9418651,-8.68807717 24.9418651,-12.6880772 C24.9418651,-16.6880772 27.9418651,-20.6880772 32.9418651,-20.6880772 L32.9418651,-29.870624 C32.9418651,-30.3676803 33.3448089,-30.770624 33.8418651,-30.770624 C34.08056,-30.770624 34.3094785,-30.6758029 34.4782612,-30.5070201 L141.371843,76.386562" transform="translate(83.156854, 22.171573) rotate(-225.000000) translate(-83.156854, -22.171573)"></path>
</symbol>
</svg>
</div>
<div id="xtrars-settings-tabs"
style="height: 30px; width: 100%; background-color: #12a6f6; color: white; line-height: 30px">
<button class="tab xtrars-settings-tabs xtrars-active" data-tab="BS">BS</button>
<button class="tab xtrars-settings-tabs" data-tab="Streaming">Streaming</button>
<!-- <button class="tab xtrars-settings-tabs" data-tab="Download">Download</button>-->
<button class="tab xtrars-settings-tabs" data-tab="Info">Info</button>
<label class="xtrars-switch">
<input type="checkbox" class="xtrars-onoffswitch">
<span class="xtrars-slider"></span>
</label>
</div>
<!-- Tab content -->
<div id="BS" class="xtrars-tabcontent" style="display: block; overflow: auto;">
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch"
data-search="nächste,episode,wird,automatisch,manuell,abgespielt">
<span class="onoffswitch-inner auto-next-episode switch"></span>
</label>
</div>
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch"
data-search="nächste,folgende,episode,wird,zufällig,abgespielt">
<span class="onoffswitch-inner auto-random-episode switch"></span>
</label>
</div>
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch"
data-search="nächste,staffel,wird,automatisch,manuell,abgespielt">
<span class="onoffswitch-inner auto-next-season switch"></span>
</label>
</div>
<div class="onoffswitch">
<label for="xtrars-onoffswitch" class="onoffswitch-label switcher"
data-search="wechselt,zum,vivo,vupload,voe,tab" style="font-size: 10px; float: left;">
Wechselt zum
<select name="" class="activate-vivo xtrars-select xtrars-onoffswitch" style="width: 100px; max-width: 40%">
<option value="voe">VOE</option>
<option value="vupload">Vupload</option>
<option value="vivo">Vivo</option>
</select>
-Tab
</label>
</div>
</div>
<div id="Streaming" class="xtrars-tabcontent">
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch"
data-search="Video,Autoplay,deaktiviert">
<span class="onoffswitch-inner autoplay switch"></span>
</label>
</div>
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch" style="position: relative"
data-search="video,überspringt,ueberspringt,uberspringt,x,sekunden,anfang,spielt,von,überspringen,ueberspringen,uberspringen">
<span class="onoffswitch-inner skip-start switch"></span>
<input class="skip-start" type="text" style="position: absolute; right: 0; top: 1px; height: 16px; min-width: 0; width: 50px; display: none;"
size="3" maxlength="3"
value="${isNaN(GM_getValue('bSkipStartTime')) ? '' : GM_getValue('bSkipStartTime')}">
</label>
</div>
<div class="onoffswitch">
<input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">
<label class="onoffswitch-label" for="xtrars-onoffswitch" style="position: relative"
data-search="video,wird,x,sekunden,vor,ende,beendet,spielt,bis,zum,überspringen,ueberspringen,uberspringen,überspringt,ueberspringt,uberspringt">
<span class="onoffswitch-inner skip-end switch"></span>
<input class="skip-end" type="text" style="position: absolute; right: 0; top: 1px; height: 16px; min-width: 0; width: 50px; display: none;"
size="3" maxlength="3"
value="${isNaN(GM_getValue('bSkipEndTime')) ? '' : GM_getValue('bSkipEndTime')}">
</label>
</div>
</div>
<!-- <div id="Download" class="xtrars-tabcontent">-->
<!-- <div class="onoffswitch">-->
<!-- <input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">-->
<!-- <label class="onoffswitch-label" for="xtrars-onoffswitch" -->
<!-- data-search="downloadfunktion,deaktiviert">-->
<!-- <span class="onoffswitch-inner download switch"></span>-->
<!-- </label>-->
<!-- </div>-->
<!-- <div class="onoffswitch">-->
<!-- <input type="checkbox" name="xtrars-onoffswitch" class="onoffswitch-checkbox xtrars-onoffswitch">-->
<!-- <label class="onoffswitch-label" for="xtrars-onoffswitch" -->
<!-- data-search="video,wird,heruntergeladen,und,stream,angeschaut,geschlossen">-->
<!-- <span class="onoffswitch-inner download-type switch"></span>-->
<!-- </label>-->
<!-- </div>-->
<!-- </div> -->
<div id="Info" class="xtrars-tabcontent" style="font-size: 10px;">
<span style="font-weight: bold;">burning series enhancer by xtrars</span> <br><br>
Du magst meine Arbeit und das Projekt erleichtert dir dein Streaming-Leben?
Dann spende mir doch einen Kaffee! Nur so kann das Projekt noch lange am Leben bleiben:
<a class="xtrars-donate" href="https://www.paypal.com/donate/?hosted_button_id=H76K9EAMTW7X8"
target="_blank">Spenden</a>
</div>
`;
settingsWindow.style.cssText = 'display: none;';
settingsWindow.id = 'xtrars-settings-window';
document.body.appendChild(settingsWindow);
}
dragStart(e) {
let eSettingsWindow = document.getElementById('xtrars-settings-window');
let iSettingsWindowLeft = parseInt(window.getComputedStyle(eSettingsWindow).left);
let iSettingsWindowTop = parseInt(window.getComputedStyle(eSettingsWindow).top);
if (e.type === "touchstart") {
document['settingsWindowInitialX'] = e.touches[0].clientX - iSettingsWindowLeft;
document['settingsWindowInitialY'] = e.touches[0].clientY - iSettingsWindowTop;
}
else {
document['settingsWindowInitialX'] = e.clientX - iSettingsWindowLeft;
document['settingsWindowInitialY'] = e.clientY - iSettingsWindowTop;
}
document['settingsWindowActive'] = true;
}
dragEnd() {
document['settingsWindowActive'] = false;
let eSettingsWindow = document.getElementById('xtrars-settings-window');
let iPixels = 2;
let positionInterval = setInterval(() => {
if (parseInt(window.getComputedStyle(eSettingsWindow).left) <= 0) {
eSettingsWindow.style.left = parseInt(eSettingsWindow.style.left) + iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).top) <= 0) {
eSettingsWindow.style.top = parseInt(eSettingsWindow.style.top) + iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).right) <= 0) {
eSettingsWindow.style.left = parseInt(eSettingsWindow.style.left) - iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).bottom) <= 0) {
eSettingsWindow.style.top = parseInt(eSettingsWindow.style.top) - iPixels + 'px';
}
else {
clearInterval(positionInterval);
}
}, 1);
}
drag(e) {
e.preventDefault();
if (!document['settingsWindowActive']) {
return;
}
let eSettingsWindow = document.getElementById('xtrars-settings-window');
let currentX;
let currentY;
if (e.type === "touchmove") {
currentX = (e.touches[0].clientX - document['settingsWindowInitialX']);
currentY = (e.touches[0].clientY - document['settingsWindowInitialY']);
}
else {
currentX = (e.clientX - document['settingsWindowInitialX']);
currentY = (e.clientY - document['settingsWindowInitialY']);
}
eSettingsWindow.style.top = currentY + 'px';
eSettingsWindow.style.left = currentX + 'px';
}
showSettingsWindow() {
let eSettingsWindow = document.getElementById('xtrars-settings-window');
// Vorher schonmal setzen, damit korrekte Breite und Höhe berechnet werden kann
eSettingsWindow.style.cssText = `height: 160px; width: 500px; max-width: calc(100% - 5px);
max-height: calc(100% - 5px); display: block; position: fixed;`;
eSettingsWindow.style.cssText = `height: 160px; width: 500px; max-width: calc(100% - 5px);
max-height: calc(100% - 5px); display: block; position: fixed;
top: calc(50% - ${(parseInt(window.getComputedStyle(eSettingsWindow).height) / 2) + 'px'});
left: calc(50% - ${(parseInt(window.getComputedStyle(eSettingsWindow).width) / 2) + 'px'});
background-color: #fdfdfd; box-shadow: rgba(0, 0, 0, .4) 1px 1px 10px 5px; z-index: 2147483640;`
}
showTabContent(sTab) {
let eTabContent = document.querySelectorAll('.xtrars-tabcontent');
eTabContent.forEach(item => {
item.style.display = 'none';
});
document.getElementById(sTab).style.display = 'block';
}
initEvents() {
let eButton = document.getElementById('xtrars-btn');
let eToolbar = document.getElementById('xtrars-settings-toolbar');
let eSettingsWindow = document.getElementById('xtrars-settings-window');
let eTabs = document.querySelectorAll('.xtrars-settings-tabs');
let activateEnhancer = document.querySelector('#xtrars-settings-tabs .xtrars-onoffswitch');
let bsCheckboxes = document.querySelectorAll('#BS .xtrars-onoffswitch');
let streamingCheckboxes = document.querySelectorAll('#Streaming .xtrars-onoffswitch');
let downloadCheckboxes = document.querySelectorAll('#Download .xtrars-onoffswitch');
let autoplayNextEpisode = bsCheckboxes[0]; //auto-next-episode
let autoplayRandomEpisode = bsCheckboxes[1]; //auto-random-episode
let autoplayNextSeason = bsCheckboxes[2]; //auto-next-season
let selectHoster = bsCheckboxes[3]; //
let autoplayVideo = streamingCheckboxes[0]; //autoplay
let skipStart = streamingCheckboxes[1]; //skip-start
let skipEnd = streamingCheckboxes[2]; //skip-end
let downloadVideo = downloadCheckboxes[0]; //download
let downloadType = downloadCheckboxes[1]; //download-type
let skipStartInput = document.querySelector('input.skip-start');
let skipEndInput = document.querySelector('input.skip-end');
let searchInput = document.querySelector('.xtrars-search-input');
eTabs.forEach(item => {
item.addEventListener('click', e => {
eTabs.forEach(tab => {
tab.classList.remove('xtrars-active');
});
e.target.classList.add('xtrars-active');
this.showTabContent(e.target.dataset.tab);
});
});
!eButton || eButton.addEventListener('click', () => {
this.showSettingsWindow();
if (GM_getValue('bFirstStart')) {
GM_setValue('bFirstStart', false);
document.getElementsByClassName('xtrars-switch')[0].style.animation =
'shake 1s ease 1s 1 normal;'
}
document.addEventListener("touchmove", this.drag, {passive: false});
document.addEventListener("mousemove", this.drag, {passive: false});
});
!eToolbar || eToolbar.addEventListener("touchstart", this.dragStart, {passive: false});
!eToolbar || eToolbar.addEventListener("mousedown", this.dragStart, {passive: false});
document.addEventListener("touchend", this.dragEnd, {passive: false});
document.addEventListener("mouseup", this.dragEnd, {passive: false});
document.addEventListener("contextmenu", this.dragEnd, {passive: false});
!document.getElementById('xtrars-settings-close-btn') ||
document.getElementById('xtrars-settings-close-btn').addEventListener('click', () => {
document.removeEventListener("touchmove", this.drag);
document.removeEventListener("mousemove", this.drag);
eSettingsWindow.style.cssText = 'display: none;';
});
let oManagedButtons = {
'activateEnhancer': activateEnhancer,
'autoplayNextEpisode': autoplayNextEpisode,
'autoplayRandomEpisode': autoplayRandomEpisode,
'autoplayNextSeason': autoplayNextSeason,
'autoplayVideo': autoplayVideo,
'downloadVideo': downloadVideo,
'downloadType': downloadType,
'selectHoster': selectHoster,
'skipStart': skipStart,
'skipEnd': skipEnd,
};
this.manageButtonState(oManagedButtons);
!activateEnhancer || activateEnhancer.addEventListener('change', () => {
GM_setValue('bActivateEnhancer', activateEnhancer ? activateEnhancer.checked : false);
this.manageButtonState(oManagedButtons);
this.reload();
});
!autoplayNextEpisode || autoplayNextEpisode.addEventListener('change', () => {
GM_setValue('bAutoplayNextEpisode', autoplayNextEpisode ? autoplayNextEpisode.checked : false);
this.manageButtonState(oManagedButtons);
});
!autoplayRandomEpisode || autoplayRandomEpisode.addEventListener('change', () => {
GM_setValue('bAutoplayRandomEpisode', autoplayRandomEpisode ? !autoplayRandomEpisode.checked : false);
this.manageButtonState(oManagedButtons);
});
!autoplayNextSeason || autoplayNextSeason.addEventListener('change', () => {
GM_setValue('bAutoplayNextSeason', autoplayNextSeason ? autoplayNextSeason.checked : false);
});
!autoplayVideo || autoplayVideo.addEventListener('change', () => {
GM_setValue('bAutoplayVideo', autoplayVideo ? autoplayVideo.checked : false);
this.manageButtonState(oManagedButtons);
});
!selectHoster || selectHoster.addEventListener('change', () => {
GM_setValue('bSelectHoster', selectHoster.value);
});
!skipStart || skipStart.addEventListener('change', () => {
GM_setValue('bSkipStart', skipStart ? skipStart.checked : false);
let skipStartInput = document.querySelector('input.skip-start');
(skipStart ? skipStart.checked : false) ?
skipStartInput.style.display = "block" : skipStartInput.style.display = "none";
});
!skipEnd || skipEnd.addEventListener('change', () => {
GM_setValue('bSkipEnd', skipEnd ? skipEnd.checked : false);
let skipEndInput = document.querySelector('input.skip-end');
(skipEnd ? skipEnd.checked : false) ?
skipEndInput.style.display = "block" : skipEndInput.style.display = "none";
});
!skipEndInput || skipEndInput.addEventListener('keyup', (e) => {
e.target.value = isNaN(parseInt(e.target.value)) ? '' : parseInt(e.target.value);
GM_setValue('bSkipEndTime', parseInt(e.target.value));
});
!skipStartInput || skipStartInput.addEventListener('keyup', (e) => {
e.target.value = isNaN(parseInt(e.target.value)) ? '' : parseInt(e.target.value);
GM_setValue('bSkipStartTime', parseInt(e.target.value));
});
!downloadVideo || downloadVideo.addEventListener('change', () => {
GM_setValue('bDownloadVideo', downloadVideo ? downloadVideo.checked : false);
this.manageButtonState(oManagedButtons);
if (GM_info['downloadMode'] !== 'browser' && downloadVideo ? downloadVideo.checked : false) {
alert('Downloadfunktion nicht im Userscript-Manager aktiviert!');
}
});
!downloadType || downloadType.addEventListener('change', () => {
GM_setValue('bDownloadType', downloadType ? downloadType.checked : false);
this.manageButtonState(oManagedButtons);
});
let iPixels = 2;
window.addEventListener('resize', () => {
let positionInterval = setInterval(() => {
if (parseInt(window.getComputedStyle(eSettingsWindow).left) <= 0) {
eSettingsWindow.style.left = parseInt(eSettingsWindow.style.left) + iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).top) <= 0) {
eSettingsWindow.style.top = parseInt(eSettingsWindow.style.top) + iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).right) <= 0) {
eSettingsWindow.style.left = parseInt(eSettingsWindow.style.left) - iPixels + 'px';
}
else if (parseInt(window.getComputedStyle(eSettingsWindow).bottom) <= 0) {
eSettingsWindow.style.top = parseInt(eSettingsWindow.style.top) - iPixels + 'px';
}
else {
clearInterval(positionInterval);
}
}, 1);
});
!searchInput || searchInput.addEventListener('keyup', this.search);
}
search(e) {
let bHasSearchWord;
let iIndex = -1;
let iTabIndex = 0;
let eTabs = document.querySelectorAll('.xtrars-settings-tabs');
for (const eTab of eTabs) {
eTab.style.removeProperty('color');
}
for (const eElement of document.querySelectorAll('.onoffswitch-label')) {
eElement.style.removeProperty('outline');
bHasSearchWord = true;
for (const sSearchWord of e.target.value.toLowerCase().split(' ').filter((e) => e !== '')) {
let aSearchKeywords = eElement.dataset.search.toLowerCase().split(',')
iIndex = 0;
for (const sSearchKeyword of aSearchKeywords) {
iIndex++;
if (bHasSearchWord && sSearchKeyword.includes(sSearchWord)) {
break;
}
if (iIndex >= aSearchKeywords.length) {
eElement.style.removeProperty('outline');
bHasSearchWord = false;
}
}
}
if (bHasSearchWord && iIndex !== -1) {
eElement.style.setProperty('outline', '1px dashed red', 'important');
let sTab = eElement.parentElement.parentElement.getAttribute('id');
for (const eTab of eTabs) {
if (sTab === eTab.dataset.tab) {
eTab.style.color = 'red';
if (iTabIndex === 0) {
eTab.click();
}
iTabIndex++;
}
}
}
}
}
manageButtonState(oManagedButtons) {
let activateEnhancer = oManagedButtons['activateEnhancer'];
let autoplayNextEpisode = oManagedButtons['autoplayNextEpisode'];
let autoplayRandomEpisode = oManagedButtons['autoplayRandomEpisode'];
let autoplayNextSeason = oManagedButtons['autoplayNextSeason'];
let autoplayVideo = oManagedButtons['autoplayVideo'];
let downloadVideo = oManagedButtons['downloadVideo'];
let downloadType = oManagedButtons['downloadType'];
let selectHoster = oManagedButtons['selectHoster'];
let skipStart = oManagedButtons['skipStart'];
let skipEnd = oManagedButtons['skipEnd'];
!activateEnhancer || (activateEnhancer.checked = GM_getValue('bActivateEnhancer'));
!autoplayNextEpisode || (autoplayNextEpisode.checked = GM_getValue('bAutoplayNextEpisode'));
!autoplayRandomEpisode || (autoplayRandomEpisode.checked = !GM_getValue('bAutoplayRandomEpisode'));
!autoplayNextSeason || (autoplayNextSeason.checked = GM_getValue('bAutoplayNextSeason'));
!autoplayVideo || (autoplayVideo.checked = GM_getValue('bAutoplayVideo'));
!downloadVideo || (downloadVideo.checked = GM_getValue('bDownloadVideo'));
!downloadType || (downloadType.checked = GM_getValue('bDownloadType'));
!selectHoster || (selectHoster.value = GM_getValue('bSelectHoster'));
!skipStart || (skipStart.checked = GM_getValue('bSkipStart'));
!skipEnd || (skipEnd.checked = GM_getValue('bSkipEnd'));
let skipStartInput = document.querySelector('input.skip-start');
!skipStart || (skipStart.checked ?
skipStartInput.style.display = "block" : skipStartInput.style.display = "none");
let skipEndInput = document.querySelector('input.skip-end');
!skipEnd || (skipEnd.checked ? skipEndInput.style.display = "block" : skipEndInput.style.display = "none");
if (activateEnhancer ? !activateEnhancer.checked : false) {
this.disableButton(autoplayVideo);
this.disableButton(autoplayNextEpisode);
this.disableButton(autoplayNextSeason);
this.disableButton(autoplayRandomEpisode);
this.disableButton(downloadVideo);
this.disableButton(downloadType);
this.disableButton(selectHoster);
this.disableButton(skipStart);
this.disableButton(skipEnd);
}
else {
this.enableButton(autoplayNextEpisode);
this.enableButton(downloadVideo);
this.enableButton(selectHoster);
if (autoplayNextEpisode ? autoplayNextEpisode.checked : false) {
this.enableButton(autoplayRandomEpisode);
this.enableButton(selectHoster);
this.enableButton(skipStart);
this.enableButton(skipEnd);
!skipStart || (skipStart.checked ?
skipStartInput.style.display = "block" : skipStartInput.style.display = "none");
!skipEnd || (skipEnd.checked ?
skipEndInput.style.display = "block" : skipEndInput.style.display = "none");
this.disableButton(autoplayVideo);
if (autoplayRandomEpisode ? !autoplayRandomEpisode.checked : false) {
this.disableButton(autoplayNextSeason);
}
else {
this.enableButton(autoplayNextSeason);
}
}
else {
this.disableButton(autoplayRandomEpisode);
this.disableButton(autoplayNextSeason);
this.disableButton(selectHoster);
this.enableButton(autoplayVideo);
if (autoplayVideo ? autoplayVideo.checked : false) {
this.enableButton(skipStart);
!skipStart || (skipStart.checked ?
skipStartInput.style.display = "block" : skipStartInput.style.display = "none");
this.enableButton(skipEnd);
!skipEnd || (skipEnd.checked ?
skipEndInput.style.display = "block" : skipEndInput.style.display = "none");
}
else {
this.disableButton(skipStart);
skipStartInput.style.display = "none";
this.disableButton(skipEnd);
skipEndInput.style.display = "none";
}
}
if (downloadVideo ? downloadVideo.checked : false) {
this.enableButton(downloadType);
}
else {
this.disableButton(downloadType);
}
}
}
disableButton(oElement) {
if (!oElement) return;
if (oElement &&
oElement.parentElement.childNodes[3] &&
oElement.parentElement.childNodes[3].childNodes[1] &&
oElement.parentElement.childNodes[3].childNodes[1].classList.contains('auto-next-episode')) {
this.playNextEpisodeIfVideoEnded(false);
}
oElement.classList.add('disabled');
oElement.parentElement.classList.add('disabled');
oElement.disabled = true;
}
enableButton(oElement) {
if (!oElement) return;
oElement.classList.remove('disabled');
oElement.parentElement.classList.remove('disabled');
oElement.disabled = false;
}
async skipUnavailable(aHosterOrder) {
let hoster = await this.waitForElement(`.hoster-tabs .hoster.${aHosterOrder[0]}`, false);
if (hoster !== null) {
document['location'].replace(document['location']['href'] + '/' + aHosterOrder[0]);
}
else {
hoster = await this.waitForElement(`.hoster-tabs .hoster.${aHosterOrder[1]}`, false);
if (hoster !== null) {
document['location'].replace(document['location']['href'] + '/' + aHosterOrder[1]);
}
else {
document['location'].replace(document['location']['href'] + '/' + aHosterOrder[2]);
}
}
}
}
class StreamingHandler extends BaseHandler {
appendOwnStyle() {
let style = document.createElement('style');
style.innerHTML = `<style>
@media screen and (max-width: 800px) {
#xtrars-warning-window {
width: calc(100% - 10px) !important;
}
}
#xtrars-warning-window {
position: absolute;
top: 20%;
left: 50%;
transform: translateX(-50%);
width: 50%;
background-color: white;
}`.replace('<style>', '');
document.head.appendChild(style)
}
async handleBsVideo(sActiveTab, aToBeChecked) {
for (const regexHoster of aToBeChecked) {
if (regexHoster.test(sActiveTab)) {
let eIframe = await this.waitForElement('section.serie .hoster-player > iframe');
let sSrc = eIframe.src;
window.open(sSrc, '_blank').focus();
eIframe.remove();
let eHosterplayer = await this.waitForElement('.hoster-player');
eHosterplayer.innerHTML = `
<h2 class="">Dein Stream ist jetzt bereit</h2>
<div class="play" style="display: none;"></div>
<div class="loading" style="display: none;">
<div class="wrapper">
<div class="line"></div>
</div>
<div class="wrapper">
<div class="line"></div>
</div>
<div class="wrapper">
<div class="line"></div>
</div>
<div class="wrapper">
<div class="line"></div>
</div>
<div class="wrapper">
<div class="line"></div>
</div>
</div>
<a href="${sSrc}" target="_blank" rel="noreferrer">${sSrc}</a>
`;
break;
}
}
}
applyShortcuts() {
document.addEventListener('keydown', this.shortcuts);
}
shortcuts(e) {
if (!e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
switch (e.keyCode) {
case 37: // Left
e.preventDefault();
document['localVideo'].currentTime -= 1;
break;
case 38: // Up
e.preventDefault();
if (document['localVideo'].volume < 0.9) {
document['localVideo'].volume += 0.1;
}
else {
document['localVideo'].volume = 1;
}
break;
case 39: // Right
e.preventDefault();
document['localVideo'].currentTime += 1;
break;
case 40: // Down
e.preventDefault();
if (document['localVideo'].volume > 0.1) {
document['localVideo'].volume -= 0.1;
}
else {
document['localVideo'].volume = 0;
}
break;
case 70: // F
if (!document.fullscreenElement) {
document['localVideo'].requestFullscreen().catch(() => {
document['localVideo'].style.width = "100%";
document['localVideo'].style.height = "100%";
document.body.style.margin = "0px";
});
}
else {
document.exitFullscreen().catch(() => {
});
}
break;
case 75: // K
if (document['localVideo'].paused) {
document['localVideo'].play();
}
else {
document['localVideo'].pause();
}
break;
case 77: // M
document['localVideo'].muted = !document['localVideo'].muted;
break;
}
}
}
bIsPlaying = false;
async isStreamingHoster(regex, selector) {
return this.hasUrl([regex]) && await this.waitForElement(selector).catch(() => {
});
}
async findOutStreamingHoster(aHoster) {
for (let oHoster of aHoster) {
if (await this.isStreamingHoster(oHoster['regex'], oHoster['selector'])) {
let video = await this.waitForElement(oHoster['selector'] + oHoster['detailSelector'])
.catch(() => {
});
await this.setStreamBehavior(oHoster, video);
}
}
}
async handleLocalVideo() {
if (!GM_getValue('bAutoplayNextEpisode') && !GM_getValue('bAutoplayVideo')) {
return;
}
let video = await this.waitForElement('html head ~ body video').catch(() => {
});
// Fängt Event ab und verhindert, dass untergeordnete Elemente auf das Event reagieren können (somit werden Popups verhindert)
window.addEventListener('click', (event) => {
event.stopImmediatePropagation();
}, true);
document.addEventListener('AutoplayWarningShowed', () => {
if (this.bIsPlaying === true) {
let warningWindow = document.getElementById('xtrars-warning-window');
if (warningWindow) {
warningWindow.style.display = "none";
}
}
});
document['localVideo'] = video;
video.addEventListener('loadeddata', () => {
this.applyShortcuts();
video.addEventListener('play', () => {
this.bIsPlaying = true;
let warningWindow = document.getElementById('xtrars-warning-window');
if (warningWindow) {
warningWindow.style.display = "none";
}
});
if (GM_getValue('bSkipStart') && GM_getValue('bSkipStartTime')) {
video.currentTime = GM_getValue('bSkipStartTime');
}
if (!GM_getValue('bSkipEnd') || GM_getValue('bSkipEndTime') >= video.duration) {
video.addEventListener('waiting', () => {
if (video.currentTime + 2 >= video.duration) {
setTimeout(() => {
GM_setValue('isLocalVideoEnded', true);
window.close();
}, 2e3);
}
});
// Wird vom aktuellen Player in Verbindung mit Autoplay nicht unterstützt
// video.addEventListener('ended', () => {
// GM_setValue('isLocalVideoEnded', true);
// window.close();
// });
}
else {
video.addEventListener('timeupdate', () => {
if (video.currentTime + GM_getValue('bSkipEndTime') >= video.duration) {
GM_setValue('isLocalVideoEnded', true);
window.close();
}
});
}
});
video.style.width = "100%";
video.style.height = "100%";
document.body.style.margin = "0px";
video.requestFullscreen().catch(() => {
});
}
detectBrowser() {
// BIG thanks to Rob W https://stackoverflow.com/a/9851769/8887112
let bIsChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
let isEdge = bIsChrome && (navigator.userAgent.indexOf("Edg") !== -1);
let bIsFirefox = typeof InstallTrigger !== 'undefined';
let bIsOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
let bIsSafari = /constructor/i.test(window.HTMLElement) || (function (p) {
return p.toString() === "[object SafariRemoteNotification]";
})(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
if (isEdge) return 'edge';
if (bIsChrome) return 'chrome';
if (bIsFirefox) return 'firefox';
if (bIsOpera) return 'opera';
if (bIsSafari) return 'safari';
return 'none';
}
async setStreamBehavior(oHoster, video) {
let aMatch = video['src'].match(/^blob:https:\/\//g)
let bHasHls = false;
if (aMatch !== null) {
this.appendOwnStyle();
// Extract m3u8 video url and then
video['src'] = Array.from(document.querySelectorAll('script')).filter(item => {
let match = item.text.match(oHoster['m3u8Regex']);
return match && match.length;
}).map(item => item.text.match(oHoster['m3u8Regex'])[0]);
if (oHoster['hoster'] === 'voe') {
if (Hls.isSupported()) {
let eVideo = document.createElement('video');
eVideo.id = 'xtrars-video';
let videoSrc = video['src'];
document.body.innerHTML = '';
document.body.appendChild(eVideo);
const config = {
enableWorker: false,
};
let hls = new Hls(config);
hls.loadSource(videoSrc);
hls.attachMedia(eVideo);
eVideo.play().catch(() => {
// Autoplay wurde blockiert
this.showAutoplayWarning();
});
hls.startLoad();
document.body.style.cssText = 'margin: 0; height: 100%; overflow: hidden';
eVideo.style.cssText = 'width: 100%; height: 100%; background-color: black;';
eVideo.autoplay = true;
eVideo.controls = true;
}
}
else if (oHoster['hoster'] === 'vupload') {
document.body.innerHTML = `
<video id="xtrars-video" preload="true" autoplay>
<source src="${video['src']}" type="application/x-mpegURL">
</video>
`;
let player = videojs('xtrars-video', {
preload: 'auto', controls: 'true', Hls: {
GOAL_BUFFER_LENGTH: 120,
MAX_GOAL_BUFFER_LENGTH: 240,
MAX_BUFFER_LOW_WATER_LINE: 120,
BUFFER_LOW_WATER_LINE_RATE: 10,
GOAL_BUFFER_LENGTH_RATE: 2,
INITIAL_BANDWIDTH: 8194304,
},
});
document.body.style.backgroundColor = 'black';
document.querySelector('#xtrars-video_html5_api').controls = 'controls';
document.querySelector('#xtrars-video').style.cssText = 'width: 100%; height: 100%';
document.querySelector('#xtrars-video').childNodes
.forEach((item, key) => {
if (key) {
item.style.display = 'none';
}
});
}
return;
}
// Wenn es eine nativ abspielbare Videodatei ist
if (GM_getValue('bDownloadVideo') && GM_info['downloadMode'] === 'browser') {
GM_download(video['src'], GM_getValue('sEpisodeName') + '.mp4');
if (!GM_getValue('bDownloadType')) {
setTimeout(() => {
GM_setValue('isLocalVideoEnded', true);
window.close();
}, 3000);
return;
}
}
if ((GM_getValue('bAutoplayVideo') || GM_getValue('bAutoplayNextEpisode')) &&
(!GM_getValue('bDownloadVideo') || GM_getValue('bDownloadType'))) {
window['location'].replace(video['src']);
}
}
showAutoplayWarning() {
const warningWindow = document.createElement("div");
warningWindow.id = 'xtrars-warning-window';
let oContent = {
chrome: `
<div style="width: 100%; text-align: center; padding: 5px;">
<span style="font-weight: bold; font-size: larger;">Autoplay wurde vom Browser blockiert!</span> <br><br>
Zum Aktivieren kopiere den Link in die Adressleiste und aktiviere "Ton"
(Es muss Zulassen drin stehen. Automatisch reicht nicht.)
<br><br>
<input type="text" style="width: calc(100% - 20px); margin: 5px;"
value="chrome://settings/content/siteDetails?site=${window.location.protocol}//${window.location.hostname}">
</div>`,
firefox: `
<div style="width: 100%; text-align: center; padding: 5px;">
<span style="font-weight: bold; font-size: larger;">Autoplay wurde vom Browser blockiert!</span> <br><br>
Zum Aktivieren halte dich an die Bildanleitung:
<br><br>
<img src="data:image/webp;base64,UklGRuohAABXRUJQVlA4IN4hAAAQlgCdASolAsIAPpFEnUolpCMhptOqoLASCWNu4WsAsqP/67ui57+o/tvyg/kXXgePeF/ktybO1szvp8/X/cP9Hf9/6wv9H5l3rv9OXmE/bv1lPTj6BX63+rp/6fZM/pvqP+dt/6/21+I7/Kf9n/d/6P2utWk8z/3f8ZO/3+4/1P9nfPP8d+d/sv5Zf3D2ssyfTnqR/F/tV+C/vf7n/4n3H/tf5b+cvwx/qfyw+AX8m/lv+T/sv4/enb/Zdw7r/+a/zPqC+t3zH/Uf2n8f/Q0/jf7D+6nuh+a/2v/B/bn9gH8n/nf+l/O3+3fL3+i/2XjM/a/857AP8y/s/+3/u/+R/aT6W/4H/q/5b/Yft57Yvzn/Gf9b/I/5b5B/5r/VP+Z/f/a7///uP/c3//+7r+wv//DtCOanS9n/YOfdQCOI/qEBJuYq9OGn92+4VbeAivxpJPD2VYCWuEF7xwyyFHkAaJy0AmeVAQpdceOCuIMz91LXq15IdPrnkPnwS381EVFxdVJbt+OIRECdz3F7oDMLjGUQ90nVhXPdPqjO6qzZT1ce4PgLBnCOpka6NDetdnZ2dnMCfR3IxMISHDec4cOHDhw3mzZzhw1ClzAaK8XAxRS1TshQjJQtuWM2kOB9PAlUy0siCULAOD5fPmWGG9KRwjAo4bfg+8TKdObA8ZUZRm0SIM/7leW+k4l4TxffcNuYuyddFnvcIfTI1X1G0KrJabUJvCj2GnytpiK13A6iPicA9ggFQcvzTUfShNS+SkxQIsHryFN7bSzMmL6Ehauat7kTD+v+P+Ozeuyao3fB7o3SOG4f3hbbcvSrpgtJorBZaxUbGxsbGxsbGxsa3rhqDLu0V2fwHwCEkJCQATvURPvrlsO8lE7pCw80sxeJL15leKkCjyme/PYUf2e92Wdm8vqrNC79fc/68S3ARWghsMpDMcJembK+S8IPUVfa2RquK2991uUGv1EeBLtXn5anQezR3IkTDP3T++idwZDa1IR39WodjAMWsAIKBV9Mww3MsWgVBOrvJa4WBS80zZTCUfbbAelfMeRel2nP48AKVTaYzMmQFHOaWC3OAKjbSSoTNcC/Ynt41vhVqU52bNmza52bNmzZs2bNm106aaIdXZQAEPpZ41cISVqDN4OY7YzzRrRiKuPd6u8qoOzx5R786z1BjOktY/XIM2BLcwaFobJmzvctb/8kVAr129+hsxvK6Dk0nI/yo3KV46NNbhDWK5S7K9TsKFCz9lJuaJoEgLaKXUePqkPPq6MbxDduUjQqqri+j6R72DU9F2C4nXjhvtYWnsYIQodMJ819aZ++L0/1XrdPOyXbecJuriqp9Y+DyBtUhn2CfZAjD9mVC4PY6XMsx3nPhHUohCppL9eZZZ3nQEv88JWctHAZQoNfuQdufJ8vJy+tg0oGu67cpBRducdclkRub7L3IYAtm6BDplRkA1BJTPl3SBTb3QZP5IkkkqS5JgwvhOiemzEH/wxg/W8KPICKz5rdQMZfW6gYy+t1VDTLXQBERQEBAQEBAQEBAQEA+jyYnwnD7FBpqNodXNNNNNNNNNNNNNNNNNNNNNNNNNE0KjrzFD/blUQ+mRqvqNoVHXmKCAAA/OkuaYAoKcn9Z7oPM16cEEjzx6umU7p/pY9ER/5GIGCxcyuqNb/H0bCNlwt+2KkhKX87uNdnuHgY0oHrkC5Fivqe60RTYF2TRDvrTVBvxYPqNNGddXbensmabv1NjhFrOJLVeYfTp7zaPzGpk+UudbF3WURtNPH0ijxNKmsp7u6HaBLSfK3txQmjnACo/DmL5kFcXsl37kcr7vLM4b8lG21UK9MTAEzb4L/NF3SsMOnavVXj4mRN/ECOMAx4RQOQVo+iG/nZ4FjnIhZRB2213ZIVikKPAlXTJIalB70O31JDQuUACvOcDnjwjdktkBy52Jz/LvEL/lzhJ+clA16RPt4zDuHgzzxNBmUxzbQ049xihh39aiK4QA/i7LpH8bJA4ntRw5ZIJ+kwshEREFQVFvZdNi5TMgfNxC+aZCQkdiTwzQ9v0UpmXiVMrJh/oYeJh59K5Hpv7ycipXzXZl/XQJLJszsOTbw0U0DphdfZYNs5FFZ/PvLuUH7L9kYaqN6d2crcKbZoQ4LvTGYmzOd+jhlN3Cc8Ah3s4Le7JnfvSrXOJuMcMLrksXpMt8Lz9qR0fwn/5die9i7BMnZd4qAytrPQkQURGphviHWKg9tPJJI6F0UBnFhxdqzboy8EdMovJEhabQEbmuhMVXQu+YSHoFYJvNzm2TlXdESJ824M3+pMI+KAYavjzEUNbmG5XC840BifG8UMayqAE0Hdi9B9f6LouwtQ6mTSV2bGH7nhBpA9ouXuT/GAo/u2rBgEwGW8OBHL9GBe4yf5NZoEPHLls6qF/JB+EZ1j+8RpOrJcSbm69ILj12c5T9M9FrkUu+vfasEa/rsCeT5zZQRrJYSLmXhteuSGviLKXEeqf8e3dYXMX7j9jmZ+9JB6vljelrx2TmV0BGbSBHj/Nk09KZuyp++UevVxQRE5JD1gp1Tj1CbfBa1faA/JmxMBjqfT8HCnJzMUyvgMS+vW9SViv2r6j0T0HX1/aHdzio+UQEb5Q62Y1ZsYcoT6wMu2IpwTA/l5Eq/2aBEh4w1fE+Y0ee6LmogVBggQfEsJPGlmRj+8FvqSD1wMT7rVMCbiiX3RrDqda/AbKlT1Tt/KDbbA+P+Ts/dwZ5VItbP75kNE7TtmH6xLNnHvHt63X/q27BpwC4/rMbAGP/AilMv+u38l0sU654uf6g0TxxMS+HMvRIHEewzk7uu9typ995BJRhEys1YVb5WmF9VMJWSIei1zz7+744Tn0DS4uP6mTbH58vXOb9ktYT5vONq89i//AxV0fuJNj2OrSH+pXUEb9y6qInP+cHJmxQvoseBk2OzjEW7V9y/n7EESx4wlLkXEAvs+SHk5kI6E6g332DGbDAxlGBR8MvkOnne06OkUVRxfzOfb6as00MVXskcNrLlkueQ+hsDCfNM1sjUVZNWkU/hNlQ/vNacNk98IAGwq9ppmgoSfCQ/LyMiUzPCTAnIDE9jDmAWLb8NPxYUM6PJMT5kSsnh+75AarKe3v2NfcQ4hstr1fIgYYmLCGDl3aQ8qoD0YQvRLnL46osT5kdpMpLjzvOCrx6LR7a7N7tlJc50x7ajAkMVFYkymCan0/k7l0SuiNkeefuWtNdh2fikAt2/E+GFHkLoDSSI5qzWPriJ6zL/nHvoeWUuzHbnVaS2sDAwHBD7CXYoc4xOwkydf2fyX6yu8X6EirQa+pb1Ytx9SthY4BK0lhh4twWNBcbdbUBf3BMrnMR4/6mCwT/ty6YGhZlv7Sh3mIgGRAWn8cJKtxRCLxRpEMU+zDTAG58uAr5VemVHmJz/VUPJOoP0UwDiS+9iKbZ33sA2Ae7B6our0mzRQF/nSFe+VBB2tTgXAaf+Erj+933X/5zPvVoIaOu1pAaeH3LSJ9BcI+IelJuaL+Xcj+hI5cywZOGujIjyddKERH2vKI0K+t3fc/rcEhX+R7Fe0Eyz1dyKmt2wYRTp8rj+/H1EEtnvpWSC9/IEhtTFCZa9Z7HQSPRFPYr4IL6+gNI4uN8uho5C8iM5rmrTPZZVVR87c4zV7fOk+LFL4ALSPvt/lnjkgGNJCwPlANNGg/63OxVuW2vh8FFn7PjatBPUgHgPaG7DGDAyYNsJDqTYOlltPd0AbSVnKiolZreKlDqrYxguHcyCPGUZ6LvnXVzIEZlHjkbEjnSX0i49nmVEamZRVTk02kKLckxMj5KzjeD+VNIrBESBta0GKPgKRQ+n85mn3esXewjIODvfCLh25IRkBNOghaKukdCfa1x+0LWY/Ve1jaGYOXOsI3yWe1xy9gQqG3tkM3w5/lszVS9LTgJH+beMsfHQSEWAlmKyNd4QYSMcFMt7gelkbLCEcrVdOha1x/FSjKjyX+IYRsFuFnmgEXiH5Tv8UPSbEVjTmcS1zWpR9lxlpi8xi/H+P73tJPN7PWpI1cMuZBu/QtAejXvWOX7/gCWSmhyzLbs7orDdTZGaNM+Tms0jwDVAUzc4nnuKLOb0UbN1ymTSPxbip6RFw1KTE3Mmtk8tdRga3niA+2t8eeDzyOC+UMot6g2XA6b5D4YXSzV6w5vKc2duV8nIPj7osZvsEzZ3xCef9N1WWqsF3j2Go4+6eGgzsy7xonWkh8s90bFC1iYWSn6PFW7YGsliF8qsaH8pVTFB2YeKGToDMfd85Bceh0Wve+3SW78qkqmhXpSFxr9s15C5zW3vQDrChF/ZcvHQnbRvWtMrtx/NPR9qBOCnxk5Av/ZrzLmtg9z26w9pfGo+D7audMmGwJtF548t7NonZcSK6xBHwMHWuOfjC6m7fTC/KIAxWYwJbYrMdXg89M+yaQhAs6Am6C4TaJuHezchwyvEcYpegOyQEk+MA8a9iEk7UjQHZpfQQBoBnuryInBvMN5Jq+Z8T54DDPZJice5p8icgt4z4mn52nQDnyHUtBsMpI7nSk3KQeJnqTxCtFU804ziCTCIOVDvd0XgJE6Hi3uH4UPRhF4zfk4stdvNaN/eWASPe3d4VJfzKfwk77fuL8D7f18OjC+EykZHQKsSnb7JImwIhG7e33no3pZhx77uUweLqvVudTAU+/q7RnPYC5yPlIGUL+ekzQr64P1dE8ZvO3SHYzjv1K21X+5JhuTyWFc+0GZCu+gZgAAQ3WcEvsFaIIXKhP/eIkUljmCai2UaCf3cT9PPtjOFSFEypaTPZXTgK5hD/5EUMTtfKmG1Q0fv0W1586GVjidTMiTLCLdkNGVYbah2dz/T4iOoOVqxMdxLNWLS9qBjDXprb4o/HFlLoAS6m0r2iMZHsVekz4xfNACjjbp9MwICwJyiGoI69V19FTKl1SLlfTkg2FGXr2UT6n7g9m/Qd3No4wvAQcSahjN61w5R+dZyWX3BInkkCceIj11odMaF2ZMr7vjz4Fg+A0WtOqGDye1su426JIQW2P9/3CZg1k20cZxEtx2Ah3Fqebxf37w4HsgtIRjurjQwoIIVgwbxpl6xMC7IOxMdLixMUS27YCebUBjJeiWKgInXM9QhCyDsNIJQzRx3N1EujqvDKPKNtXhybXO49+r27foFHjzyqxUk7t1A0hYc+YByI/lpCBnHuo4upcuow2TawEjGTg6ykALJMVG8KZtDGshqSau0fggFkjngCVpeI9EOnQRbKLrsXuwx11n1YLspgtvY3wW3wZUqEEgtZxUSimx8HrdpTUiYet90KvYFNEVUd2HpxJyQU0w12RjpvCMsWccx19GermaYHaXVcm31m/BVJpjQCP4zryJvFnKIN8flNEwjnNiJCZDG6hM1xx8hXfiP0ZT2lLB88iIKB7994HiHv1z6bmUxbrFw8dT76YPXIsqTJhllw8dT8FXECn8R7Gnx9bh9EmpdBlL9IZQ4miXa3E9Op18PhgaC80ZNfuMbJMLggR3vd8jmmAdASeE7zycGbPrQsIq0dygApShqFd3isnHLt5HE7v7wb3siKc9FS3mG+zo3SCjLc+/Rb1r1ad3xiuqaqGJIR36FPaH4jdReJ4nLK9+RF2O9gwjUsc7n44kuEChBv8xu7gc9fxMN/EdExh75VDdjkMwba7KnpNBRY1LbxhEC0McGB8lYlAJlx5/XaePYfJkbIGclfKOYwCfIq/06VeuO2Hc/5TZ0Sg7eUT+POoW3tW5rf/6a/IopW2Hs7NTNG+kKpEH5fyANEshD6LxzUHNOYHiKFZccCPek0Bq5LkdoZfp8zSNdS3TTTF1Qr9bvn7G7xZCT2dSkHU+5meO1NM0dXjfp1ol6O/ct8te4q0IGivdwf1TQ3us9ZK7etZvrWU7D6iHh86ztPn3abaK/VRQafB7fkDkbywPdt5+CXjQOSnUrRxHT2J8RtTH6jW2Na7SqMBXiMXaWG7DVE2FpPKG512TCEWjmSub8k1BR+BjJADzOHiaw0FY44hcQLih79JKRrB4wubfgevQw/RfL7U8s1wyrmOGubOKyulgYDD5nVLyMwSvn24CqkbmkeXd+CyZdvsYUvHrVzIuQNiknkpJy3k1hPNdJ0kfo6JH6SsAIj4XrkpbU5E/OIa+nNicz12PwuV9kTEp2kw/FFLcas27MQpRo+N0qMQ2HnT/wS+oA/PxASVKTpLGP2oN9XM9yDCpy/2UsqIQdbHH7KrI5i1tfZ0r+oEVZuv74MfPSFNhBJUqnSxG+np2DNbNehmAY1jEwUoE07MbkCBQrQ2KdQjD6z75Q2RazBwzW6YT07LLTLH8wSypIDb0jfNBGiKcGjNIk8xrQHdBf3r/fJOhATSazON4vdSYC3GSQ39HY4iTAElNsCD5s+kDUBOYfKllHL2fa2/yZd+Ds1kCDsdJZSzsmGjcrurPxX1TFNVxVLt8UQ6mpF7JtcNbncgBfKe275wZtP2S8nIaoePMzpIpBjLGS9jJQvTXwRlJqcfmxpvH0Zo/4ddrEz8cVs+5U7cC1gQhzW+9YnqzeOJKTc4LcVDANYYtJjRrF3r+1HxgVL4F6ea1QPmFLvE+WE8GC5LW8JhpnApvySKHMNpvdaLywTs2rlvbfXr8nJ9Jz90ra8cask+5y/sdV/4RneqkR2JxUyP+DPR9uAfebyrhGxYuq3WsxY8TfmNeTStiscHhPjkeOXAtzOjzgDVdz8K7P3qtg2gzT1/PxfyYGJOjsld299kg7UN1DRx/a7WZvlU01piMO4huLktQLhpPWPyMu+B6g4S7Gwdr1qXnK6HSX2MbSUfTZRmvSsFj+zUj+w3624Xa8uUE2NQ2OmoaUrAtTpKCt3siJpRFx1v7ROTa25zKoj70cpmhUwK/wYHe+37HNYTkqbvzXs1G8/nek6WjH7Y0Qhs/ZavO5Aob3Kcu0AWGD6pHxvkhh9NyDeHIEWxRMRMAsUx7nbpZXMbbniMLd0Yv88u4xLeYS3vCxmTox9hNNTfThafC5zdP00/zmVln8SZ44gO/HEDWQH6Cu8Y8rcq3JUDJLF85PFYIprMsGD7OqMArORXhf1O8YN6n7MEEJbob2ywbKGWD+kc88ka079S4X7MAnX7m/zqOEQurt8FWoK2sQtzRgtSsgBfXF5iD8Uv6thXbsOEZQJ7q3rrJ2UrqrFgKgcj2ue3GDIlMNTQRNfRnTFw1gAfbtX0TSEjpovHOf7WWfAS8Afv14L/WJ/9EuHBzklbr4dshHZcm7WmiqNMYTpBI/bZYqiJ0svVNcGX51ZVWErZn3ISCiG6g84ZdB3VRuC3zDtqaNr5xvnGYz5C2QZd6Ue/8ibFLeukZkomDTHg16EYkCzn82d8TccGksDDr8Lbod35KVSejDhaQa1DNxx9JKoYlctpHsIg3xxXZCoUEhn1FdyWIltbfQHyrrT08gFb36Te+wQK6tqFuhr58gc6vpd58axqANqOFuQaqY054ow1kRhASqD8BgyzsxQeGeATD4TTu2kH122RVivf15QuezTjj2FCFfAVDZZNLLNsTqv+nVUl63qBsjHzRhSM/TqniVqHWX18ObCYtRUv8eGM9AizA1wZIir4tM2l7JVHWP4QlxwAUFWMcVvLLBNvkdvXaxN7fhHdvfJNoF2iXOaqmQVBZyImmhbsinTCtW/TQ5zhzz41fJmJFmFETJQuatoqay7wPOxaz4vBpojPEanib6deRXZ+QL00AVZ+3i5glEolsjA/GDjqoGO0T0FRXKB9RyBCPrgqyR3bDkb2pagpoz7NdzYNRxVYtqsndaXpt/b2Pkei5uD2dYUYhutQA9U1cxJGYjrQ/LJH/7fCz2OFhL3juHQ2GQVQ5/dItSCQjA7P7SPv8l//zjj58ZqvIYhOJLCZiPuCKtPRVeIUJkViOFL2OOf3f3TpgASD5jyQ/Tpgem18ENVU8vhRkHlW7b4u/dwTovo2gBzyfWvUUAAAThGMWhxnHOrBpt4x7DEAHUb5TEhUbd0V9cEyyfG9n+1KyLAr5BNmXHbo4RXPUKZzj1e01cP+V+j25f7L8MbqBFOTlRhVZLmbzyS4+cgozMuETLmUQtNW5I6rU8rrNDfUN0HZUo7vogL+m6t66MCODzdFGPYffhVZLzOb7bu+6qasbVEO+FY8CzlK9qiEq840amTSGhM0XBOwpe2w03Gd0Q0ojrieDQnbzOgwu0lXJZKkpHbhWxsGkpqchYLnGhjWB97Tl6Y01eqBH9HQaotSHsquwAQANDNzgpoNnV0gADmsr7eEiPOhZqCp8NoAimP0Jpj4dkSnk8h+cUqYAxwtKoqJLh25i0gUfH2XYMzGpZ++HTvuGaeEchdFumZ9X2h00xV/PmjA/qTCMhPXpwCAuO6+Vpew3v6p4j/XzKw4EvvAcC8ofBzDVZmLl0KYoAi3AA86Bxv1oBDinKb+qUx75iMI5ZInUQy9pladVotm3lDq8dCqFYPW4+thoBjv5vEea6fhJBlOIqsSHiLmSg2xsJZx+G5pdwbawPsqi0a62j0bkT9hRz0fBrY1neApfyOXfatMJpi/31YMCwRIUllG8N1y1Olx8YRxTAVG5SY/sjpf1RfzlXjMFgZbd4tmGXsBtrjqvGgNo3DbjpxdNSf+CYFpKh3FAmB6dpepiYt+YwHYz+SUX08siMJFo+KNiUdfJcHiZxjjmqA7huRSdICN2UtWeaKMJbWjo1xDT7DU5qhPtIOB4dRgf8io/Ved0ycoNvkqu9a+FKbJNjYbWtuC0D3tNjdqmndXegO3eOGSb9YX+UxWn9/KMzAAAANWS38AAosZ66f+DU9OpL/vxEoq9E1HatcNJPLBBCRvL5Uq04MgJ1Oij1ZR8dOaDhDx491l2bLTkjFwF5mdWrggf0yDZ186lgE5Gs1Ff85ajrY2OdNi2/ZGJYFb4QM4IDblrWebeK7M7i6rM7oZfIPqmugMc2/yywBt79+zbQyGwNd4B14i67A7v/oDS+nDAz5VN5vNavDvQnJv4ViBYXwa6WQ2r385ABpf9HPxiLHRILNqwVegwuQ0bQxsJlHNhJpp3OxPlhDfRwbpR9pwmcP9QdRVXyi12Ff5q83EtqvSD7XzHeVJ/Hey+TX0qIwgaM/7MqbapuAH+XtJsYkAa8lRt1S2/EWaEg1t1HcI/JXafsUaxnycYzB7KNesZPNkH4hroaCORhfiRjFWcICNrE+DPmYEqsiM66w4gwyRo6xehFPP+8v5LDY1PSRAjkC3L0R5D8Vh1cdclsrA2M5mdJ+dfWA+f+qTgLpmvEZ5VwjIw9gSDvQj31D5JC1B4cdn1MCm4W7DxLx+/KW7ghXT8Q8XZ6nZFpwidzHXCXPzxbLTBXHiyQGBz1Vt4m5xhydgFUiAf4sq0slzHaaie5G+DKBQo3fnBvE7vJyICThd8zadfO4COJJDKqKXeMsDRCqWBanHPVPkyAXRkr9stXUqWQ8tKUdZFvR9MuXZ/jpxmIXUi+X87Yty9o5J4xRs6qwvDocXD5PRix0onVnKjOnfLyQUGNnwIbbBYoNapTwjZ6yqLKtyg2YAsPVKitHQvWGpfkoup++4U9D/4ytRcncFrsSq7eNS239WbBIZHMccyDb9UbDbBsICEs2mbMN9u2Z0ImRreG/klp8Ad6LlaaR3riF0/ETAj1RsYgbiFqqpItSEekBOYfcNaFopDoUcTNMhbZyeGLn9oVF4K6EqJcRKfuBl0W/3CcEl4ama/ms7cjGuVUlhk8oFwoVwCtEycBJzgDZnGStpZGR7rW5TlQu+XbrXws7bgM0At/hrSnH6+hwZv5flz4Hh2breFqN+w7vL3p0ZfZ3bY1Ub7UeYh8VoE1y9q3qBtV8FprrBkWpVnfnjEyN4DJA/j8Nl+rymjcyiO308RzPDD8UVi5IttO9+pbrOBpG49y5umjjC3FVY0VkosgFZlByOiZ4I5qm7i1nrRbMQeRA4hLoWdYfs3X8ltFv7G2MgkfG8hpsoVMWYMUWiMFMfPfeIkbRdzbA66RNvRwWh329Kl4GRPDaDz8jWLVAmxjdaG4WmVatl+OyjgtKYMhompjFD5qfkiNP+534kshMROTV1RZwl28E7IZ5N9OoIAjYFnzSZAo5kiqJoZmAorI52KRQi/w8hJh5Q5lJSlcoYCaeiFMXk4d/muW1brPWTCXMqhPgrrLCd/zIl94IXA9M4WJTawWC4rz7ve7kS7C4pKKdwWwTFVp1kYQbUw2UW4ccCiXB2RkLpqMdKAkch71+tlk2u3VMqHmJRinBUpSrUROw6BoWv0sUriRu4QmWbmVZXSBq/+D5CQv1u+BQ9PWXTid1e8r76wBPLLiPauFs5kmPwwmgdOdHPX4u2XvqerC9B+Im/S560PGVG03z3au1/eRgugZKHkbs4exwlYnl4rmsahJkJo7rvWe/ZeJ/4v+bNu+GPbK6WXsAlwnIh2HUttTzcOBR2JwZJPfqkBGQ6XrHW5ffOs2Ll5y8c3a82JjaFyZO1ILbQ6FxMpRpW0t3syWvsv8es4+h5DAcGTOzhZHcuZ5YZ07Ejx6OR2moE++IP4/ofaLjQ8b+gAhfA/gWjoWWX+qSFH6mgdlaSr0z1oAbAqxANQdl3hq5VaA+A/CIkheuMKuBYOJrgsJq2705Pm1fAO2dS8XNHYLau5kp6WrJxEJ34IPEkCeCFHGBKVM9oCgMbJ4mrcFj5AunE7zPzvkHVcYNHS+EijVFJhZqjOWOwgMtLInrxPzjUC2W7rokKrulr9BooeuudAybpRWD53AFazsdifK+dERL+/RhuqJOgWcMcKa4LxcQvCYMJQgV4RHVudXC6HqbuNkZFhzYalAei/M26TCD0X24KuED/q6p51oGUXXLh7RjvH388Pm8kqNXEaDLnGpbOMqmhHpC/BKU/r9zwMrGB4eztGjkdQHmW+l+8sgQ/tbFwCg0A8detXuhKJMTU5I8Afw9bMXizMN51QonQtfXjkfKs0qw9dil1+Ugfn+T0jSr6zdTPOsFnQY80i/rthsR+42I1HAkJMT3wMQspfIeB5PL+JfOM6dcxmJk8hgoOX/YxDiHqW8JZpb/K7jxlaz48Aq2XHPETTOv3+T0o0I/m+rMBpES0D7pDBxeKq3hbzSVfSGwS+Eh9GU1z1ag2S18dtC5hCQbIASpIRt5fQjaaWGZd6mg90B1eCEKG7Dxz5mMYn1gH6hOfQGSr/h2Ge0LHw/Df8UyXioN0GaDFB4Wo+aWdz53nd6R8wcqO43mBaQrSQcD/lkS4YEP3mYODsP1ipZE1T5L97tdC0VFGhAUbaQ0UMBlcDYfCYMhe3fOGMKiqXX+54mUPUDn/iSim6CkETmVi0hxcyRyz+OZjKetKNMm0fgABKhc2pWlAVX6bkKzhAFCnb6CF7x+ZD4bEpEQTPbXMc8KITI0oRjzWwFqYAAZJAbj7hAwF+JoiEEm8S87Dv0ZYDGH8gSAZpqEPT44svjlxh4J7kOwqwbfXatdPCbARAKgyKnwX1TtscePHl9tGJtTIPdcNWksLk2XAATndkWMEbMXZmFGNGXM069XCRYAAAAAKqAAAAAB6mAAAAAAAAAAAAA="
alt="Klicke oben im Firefox auf das Blockieren-Symbol und aktiviere Autoplay">
<br><br>
</div>`,
safari: ``,
aliases: {
chrome: 'chrome',
edge: 'chrome',
firefox: 'firefox',
none: 'chrome',
opera: 'chrome',
safari: 'safari',
}
};
warningWindow.innerHTML = oContent[oContent['aliases'][this.detectBrowser()]];
document.body.appendChild(warningWindow);
document.dispatchEvent(new Event('AutoplayWarningShowed'));
}
}
(async function () {
'use strict';
let bsHandler = new BurningSeriesHandler();
let streamingHandler = new StreamingHandler();
if (GM_getValue('clickFirstSeason')) {
GM_setValue('clickFirstSeason', false);
let sSelector = '.serie > .episodes > tbody > tr:first-child > td:first-child > a:first-child';
await bsHandler.waitForElement(sSelector);
document['location'].replace(document.querySelector(sSelector));
}
bsHandler.initGMVariables();
if (bsHandler.isEpisode()) {
bsHandler.appendOwnStyle();
await bsHandler.buildButton();
bsHandler.buildSettingsWindow();
bsHandler.initEvents();
if (GM_getValue('bActivateEnhancer') &&
!bsHandler.hasAnotherHoster() &&
!bsHandler.hasUrl(['/Vivo']) &&
!bsHandler.hasUrl(['/Vupload']) &&
!bsHandler.hasUrl(['/VOE'])) {
if (GM_getValue('bSelectHoster') === 'voe') {
await bsHandler.skipUnavailable(['VOE', 'Vupload', 'Vivo']);
}
else if (GM_getValue('bSelectHoster') === 'vivo') {
await bsHandler.skipUnavailable(['Vivo', 'VOE', 'Vupload']);
}
else if (GM_getValue('bSelectHoster') === 'vupload') {
await bsHandler.skipUnavailable(['Vupload', 'VOE', 'Vivo']);
}
}
if (GM_getValue('bActivateEnhancer') &&
!bsHandler.hasAnotherHoster() &&
(bsHandler.hasUrl(['/Vivo']) ||
bsHandler.hasUrl(['/Vupload']) ||
bsHandler.hasUrl(['/VOE']))) {
if (GM_getValue('bAutoplayNextEpisode')) {
GM_setValue('isLocalVideoEnded', false);
bsHandler.playNextEpisodeIfVideoEnded();
}
let oName = await bsHandler.waitForElement('.episode > h2');
GM_setValue('sEpisodeName', oName['outerText']);
let eActiveTab = await bsHandler.waitForElement('section.serie .hoster-tabs .active a');
await bsHandler.clickPlay();
await streamingHandler.handleBsVideo(eActiveTab['innerText'], [/Vupload/, /VOE/]);
}
}
if (GM_getValue('bActivateEnhancer')) {
let aHoster = [{
regex: /^(https:\/\/housecardsummerbutton.com\/)|https:\/\/(v-*o-*e|[-unblock\d]){3,15}\.[a-z]{2,3}\//g,
selector: '#voe-player',
detailSelector: '[src]',
hoster: 'voe',
m3u8Regex: /(?<="hls": ")https:\/\/.*\.m3u8(?=",)/g,
}, {
regex: /^https:\/\/vupload\.[a-z]{2,3}\//g,
selector: '#vjsplayer_html5_api',
detailSelector: '[src]',
hoster: 'vupload',
m3u8Regex: /(?<=sources.*)https:\/\/.*\.m3u8(?=",[ ]+type)/g,
}, {
regex: /^https:\/\/vivo\.[a-z]{2,3}\//g,
selector: 'video:not(#player)',
detailSelector: ' > source',
hoster: 'vivo',
},];
await streamingHandler.findOutStreamingHoster(aHoster);
await streamingHandler.handleLocalVideo();
}
})();