Created
June 25, 2019 19:37
-
-
Save Inobtenio/5a5eeae64ff0461a8b0f5d6f095838a7 to your computer and use it in GitHub Desktop.
Play proper Evangelion endings on Netflix.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mediaName = 'Neon Genesis Evangelion'; // Works for romanian/latin alphabet based languages only | |
var isEvangelion = false; | |
var epNumber; | |
var audio; | |
var video; | |
var audioLastPosition = 0; | |
var episodes = { | |
"1": { 'endingThemeURL': 'https://instaud.io/_/3Rdt.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"2": { 'endingThemeURL': 'https://instaud.io/_/3Rdu.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"3": { 'endingThemeURL': 'https://instaud.io/_/3Rdv.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"4": { 'endingThemeURL': 'https://instaud.io/_/3Rdw.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"5": { 'endingThemeURL': 'https://instaud.io/_/3Rdx.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"6": { 'endingThemeURL': 'https://instaud.io/_/3Rdy.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"7": { 'endingThemeURL': 'https://instaud.io/_/3Rdz.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"8": { 'endingThemeURL': 'https://instaud.io/_/3RdA.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"9": { 'endingThemeURL': 'https://instaud.io/_/3RdB.mp3', 'secondsLeftToMuteVideo': 97.0, 'secondsLeftToStartTheme': 96.7 }, | |
"10": { 'endingThemeURL': 'https://instaud.io/_/3RdC.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"11": { 'endingThemeURL': 'https://instaud.io/_/3RdD.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"12": { 'endingThemeURL': 'https://instaud.io/_/3RdE.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"13": { 'endingThemeURL': 'https://instaud.io/_/3RdF.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"14": { 'endingThemeURL': 'https://instaud.io/_/3RdG.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"15": { 'endingThemeURL': 'https://instaud.io/_/3RdH.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"16": { 'endingThemeURL': 'https://instaud.io/_/3RdI.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"17": { 'endingThemeURL': 'https://instaud.io/_/3RdJ.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"18": { 'endingThemeURL': 'https://instaud.io/_/3RdK.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"19": { 'endingThemeURL': 'https://instaud.io/_/3RdL.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 }, | |
"20": { 'endingThemeURL': 'https://instaud.io/_/3RdM.mp3', 'secondsLeftToMuteVideo': 98.0, 'secondsLeftToStartTheme': 97.7 }, | |
"21": { 'endingThemeURL': 'https://instaud.io/_/3RdN.mp3', 'secondsLeftToMuteVideo': 136.0, 'secondsLeftToStartTheme': 135.7 }, | |
"22": { 'endingThemeURL': 'https://instaud.io/_/3RdO.mp3', 'secondsLeftToMuteVideo': 127.0, 'secondsLeftToStartTheme': 126.7 }, | |
"23": { 'endingThemeURL': 'https://instaud.io/_/3RdP.mp3', 'secondsLeftToMuteVideo': 136.0, 'secondsLeftToStartTheme': 133.7 }, | |
"24": { 'endingThemeURL': 'https://instaud.io/_/3RdQ.mp3', 'secondsLeftToMuteVideo': 135.0, 'secondsLeftToStartTheme': 132.7 }, | |
"25": { 'endingThemeURL': 'https://instaud.io/_/3RdR.mp3', 'secondsLeftToMuteVideo': 97.0, 'secondsLeftToStartTheme': 96.5 }, | |
"26": { 'endingThemeURL': 'https://instaud.io/_/3RdS.mp3', 'secondsLeftToMuteVideo': 81.0, 'secondsLeftToStartTheme': 79.7 }, | |
} | |
var resetAudioPlayback = function() { | |
audio.currentTime = 0; | |
audio.pause(); | |
} | |
var resetAudioAndVideo = function() { | |
audio.pause(); | |
audio = undefined; | |
epNumber = undefined; | |
isEvangelion = false; | |
} | |
var watchingEvangelion = function() { | |
return document.querySelector('.ellipsize-text') && document.querySelector('.ellipsize-text').textContent.indexOf(mediaName) != -1; | |
} | |
var findEpNumber = function() { | |
return parseInt(document.getElementsByClassName('ellipsize-text')[0].children[1].textContent.substring(4,6)); | |
} | |
function once(fn, context) { | |
var result; | |
return function() { | |
if (fn) { | |
result = fn.apply(context || this, arguments); | |
fn = null; | |
} | |
return result; | |
}; | |
} | |
var playProperEndingTheme = function() { | |
isEvangelion = isEvangelion || watchingEvangelion(); | |
if (isEvangelion) { | |
epNumber = epNumber || findEpNumber(); | |
video = document.querySelector("video"); | |
audio = audio || new Audio(episodes[String(epNumber)]['endingThemeURL']); | |
if (audio && video) { | |
secondsLeft = video.duration - video.currentTime; | |
secondsLeftToMuteVideo = episodes[String(epNumber)]['secondsLeftToMuteVideo']; | |
secondsLeftToStartTheme = episodes[String(epNumber)]['secondsLeftToStartTheme']; | |
var insideEndingTimeFrame = secondsLeft <= secondsLeftToStartTheme && secondsLeft >= secondsLeftToStartTheme - audio.duration; | |
var insideVideoMutingTimeFrame = secondsLeft <= secondsLeftToMuteVideo && secondsLeft >= secondsLeftToStartTheme - audio.duration; | |
var videoSkipped = audioLastPosition == 0 || Math.abs(audioLastPosition - audio.currentTime) == 0; | |
if (insideEndingTimeFrame && !video.paused) { | |
video.addEventListener("play", function() { | |
audio.play(); | |
}, true); | |
video.addEventListener("pause", function() { | |
audio.pause(); | |
}, true); | |
audio.onended = function() { | |
video.muted = false; | |
} | |
if (videoSkipped) { | |
audio.currentTime = secondsLeftToStartTheme - secondsLeft; | |
} | |
audioLastPosition = audio.currentTime; | |
audio.volume = video.volume; | |
once(audio.play()); | |
} else { | |
video.muted = false; | |
if (insideEndingTimeFrame) { | |
audio.currentTime = secondsLeftToStartTheme - secondsLeft; | |
audio.volume = video.volume; | |
if (!video.paused) { audio.play(); } | |
} | |
if (insideVideoMutingTimeFrame) { | |
video.muted = true; | |
} | |
if (!insideEndingTimeFrame) { | |
resetAudioPlayback(); | |
} | |
} | |
} | |
if (document.querySelector('.player-loading')) { | |
resetAudioAndVideo(); | |
} | |
if (document.location.href.indexOf('watch') == -1) { | |
resetAudioAndVideo(); | |
} | |
} else { | |
isEvangelion = watchingEvangelion(); | |
} | |
} | |
var t=setInterval(playProperEndingTheme,100); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment