fix : use readystate

This commit is contained in:
ashley 2024-07-06 13:44:53 +00:00
parent 673142052e
commit 8990672e62

View file

@ -700,45 +700,44 @@ background-color: #0000;
const qua = new URLSearchParams(new URL(window.location.href).search).get("quality") || ""; const qua = new URLSearchParams(new URL(window.location.href).search).get("quality") || "";
const playSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>play-circle-outline</title><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M10,16.5L16,12L10,7.5V16.5Z" /></svg>' const playSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>play-circle-outline</title><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M10,16.5L16,12L10,7.5V16.5Z" /></svg>'
const pauseSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>pause-circle-outline</title><path d="M13,16V8H15V16H13M9,16V8H11V16H9M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z" /></svg>' const pauseSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>pause-circle-outline</title><path d="M13,16V8H15V16H13M9,16V8H11V16H9M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z" /></svg>'
function csts(seconds) { function csts(seconds) {
var hours = Math.floor(seconds / 3600); var hours = Math.floor(seconds / 3600);
var minutes = Math.floor((seconds - (hours * 3600)) / 60); var minutes = Math.floor((seconds - (hours * 3600)) / 60);
var secs = Math.floor(seconds - (hours * 3600) - (minutes * 60)); var secs = Math.floor(seconds - (hours * 3600) - (minutes * 60));
var timeString;
if (hours === 0) { if (hours === 0) {
var timeString = minutes.toString().padStart(2, '0') + ':' + timeString = minutes.toString().padStart(2, '0') + ':' + secs.toString().padStart(2, '0');
secs.toString().padStart(2, '0');
} else { } else {
var timeString = hours.toString().padStart(2, '0') + ':' + timeString = hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0') + ':' + secs.toString().padStart(2, '0');
minutes.toString().padStart(2, '0') + ':' +
secs.toString().padStart(2, '0');
} }
return timeString; return timeString;
} }
function showErrorCard(e) { function showErrorCard(e) {
try { try {
switch (e.target.error.code) { switch (e.target.error.code) {
case e.target.error.MEDIA_ERR_ABORTED: case e.target.error.MEDIA_ERR_ABORTED:
return; return;
break;
case e.target.error.MEDIA_ERR_NETWORK: case e.target.error.MEDIA_ERR_NETWORK:
document.querySelector("div p span").innerText = "(Network error)" document.querySelector("div p span").innerText = "(Network error)";
break; break;
case e.target.error.MEDIA_ERR_DECODE: case e.target.error.MEDIA_ERR_DECODE:
document.querySelector("div p span").innerText = "(Decode error/lack of browser support)" document.querySelector("div p span").innerText = "(Decode error/lack of browser support)";
break; break;
case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED: case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
document.querySelector("div p span").innerText = "(Network error or format not supported)" document.querySelector("div p span").innerText = "(Network error or format not supported)";
break; break;
default: default:
document.querySelector("div p span").innerText = "(Unknown error)" document.querySelector("div p span").innerText = "(Unknown error)";
break; break;
} }
} } catch {
catch { document.querySelector("div p span").innerText = "(Network error)";
document.querySelector("div p span").innerText = "(Network error)"
} }
document.getElementById("buffer-failed-warning").style.display = "block"; document.getElementById("buffer-failed-warning").style.display = "block";
} }
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
//FIXME: saved playback intentionally overwritten //FIXME: saved playback intentionally overwritten
localStorage.setItem(`progress-${new URLSearchParams(window.location.search).get('v')}`, 0); localStorage.setItem(`progress-${new URLSearchParams(window.location.search).get('v')}`, 0);
@ -752,13 +751,14 @@ background-color: #0000;
const timestamps = document.getElementById("timestamps"); const timestamps = document.getElementById("timestamps");
timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`; timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`;
}); });
seekbar.addEventListener("input", (event) => { seekbar.addEventListener("input", (event) => {
video.pause() video.pause();
if (qua != "medium") { if (qua != "medium") {
aud.pause() aud.pause();
aud.currentTime = event.target.value aud.currentTime = event.target.value;
} }
video.currentTime = event.target.value video.currentTime = event.target.value;
}); });
// Play/Pause // Play/Pause
@ -768,19 +768,25 @@ background-color: #0000;
if (document.getElementById("popupMenu").style.display == "none") { if (document.getElementById("popupMenu").style.display == "none") {
if (!document.fullscreen) { if (!document.fullscreen) {
if (!video.paused) { if (!video.paused) {
video.pause(); if(qua != "medium") { aud.pause(); } playPauseButton.innerHTML = playSVG; video.pause();
if (qua != "medium") {
aud.pause();
} }
else { playPauseButton.innerHTML = playSVG;
video.play(); if(qua != "medium") { aud.play(); } playPauseButton.innerHTML = pauseSVG; } else {
video.play();
if (qua != "medium") {
aud.play();
}
playPauseButton.innerHTML = pauseSVG;
} }
} }
} } else {
else { document.getElementById("popupMenu").style.display = "none";
document.getElementById("popupMenu").style.display = "none"
} }
} }
playPauseButton.addEventListener("click", () => { playPauseButton.addEventListener("click", () => {
toggleVideo() toggleVideo();
}); });
video.addEventListener("click", toggleVideo); video.addEventListener("click", toggleVideo);
video.addEventListener("dblclick", () => { video.addEventListener("dblclick", () => {
@ -789,26 +795,27 @@ background-color: #0000;
document.getElementById("muteOption").addEventListener("click", () => { document.getElementById("muteOption").addEventListener("click", () => {
if (qua != "medium") { if (qua != "medium") {
aud.volume == 0 ? aud.volume = 1 : aud.volume = 0; aud.volume == 0 ? aud.volume = 1 : aud.volume = 0;
} } else {
else {
video.volume == 0 ? video.volume = 1 : video.volume = 0; video.volume == 0 ? video.volume = 1 : video.volume = 0;
} }
}); });
document.getElementById("syncOption").addEventListener("click", () => { document.getElementById("syncOption").addEventListener("click", () => {
video.pause(); aud.pause(); playPauseButton.innerHTML = playSVG; video.pause();
aud.pause();
playPauseButton.innerHTML = playSVG;
video.currentTime > aud.currentTime ? aud.currentTime = video.currentTime : video.currentTime = aud.currentTime; video.currentTime > aud.currentTime ? aud.currentTime = video.currentTime : video.currentTime = aud.currentTime;
}); });
document.addEventListener("fullscreenchange", function() { document.addEventListener("fullscreenchange", function() {
if (document.fullscreen) { if (document.fullscreen) {
video.controlsList = "noplaybackrate nodownload" video.controlsList = "noplaybackrate nodownload";
window.onscroll = function () { window.scrollTo(0, 0); }; window.onscroll = function () { window.scrollTo(0, 0); };
document.documentElement.style.overflow = "hidden" document.documentElement.style.overflow = "hidden";
video.controls = true; video.controls = true;
} }
if (!document.fullscreen) { if (!document.fullscreen) {
video.controlsList = "" video.controlsList = "";
window.onscroll = null; window.onscroll = null;
document.documentElement.style.overflow = null document.documentElement.style.overflow = null;
video.controls = false; video.controls = false;
} }
}); });
@ -818,7 +825,7 @@ background-color: #0000;
}); });
video.addEventListener("contextmenu", (event) => { video.addEventListener("contextmenu", (event) => {
if (document.fullscreen) { if (document.fullscreen) {
event.preventDefault() event.preventDefault();
const popupMenu = document.getElementById('popupMenu'); const popupMenu = document.getElementById('popupMenu');
if (popupMenu) { if (popupMenu) {
const xPosition = event.clientX + window.pageXOffset; const xPosition = event.clientX + window.pageXOffset;
@ -826,66 +833,84 @@ background-color: #0000;
popupMenu.style.left = `${xPosition}px`; popupMenu.style.left = `${xPosition}px`;
popupMenu.style.top = `${yPosition}px`; popupMenu.style.top = `${yPosition}px`;
} }
popupMenu.style.display = "block" popupMenu.style.display = "block";
} }
}); });
function startPlayback() { function startPlayback() {
// Final prepare // Final prepare
seekbar.max = video.duration seekbar.max = video.duration;
const timestamps = document.getElementById("timestamps"); const timestamps = document.getElementById("timestamps");
timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`; timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`;
// Media controls fix // Media controls fix
if (qua != "medium") { if (qua != "medium") {
aud.addEventListener("pause", () => { aud.addEventListener("pause", () => {
vid.pause(); playPauseButton.innerHTML = playSVG; video.pause();
playPauseButton.innerHTML = playSVG;
}); });
aud.addEventListener("play", () => { aud.addEventListener("play", () => {
vid.play(); playPauseButton.innerHTML = pauseSVG; video.play();
playPauseButton.innerHTML = pauseSVG;
}); });
vid.addEventListener("pause", () => { video.addEventListener("pause", () => {
aud.pause(); playPauseButton.innerHTML = playSVG; aud.pause();
playPauseButton.innerHTML = playSVG;
}); });
vid.addEventListener("play", () => { video.addEventListener("play", () => {
aud.play(); playPauseButton.innerHTML = pauseSVG; aud.play();
playPauseButton.innerHTML = pauseSVG;
}); });
aud.addEventListener("timechange", () => { aud.addEventListener("timeupdate", () => {
vid.currentTime = aud.currentTime; video.currentTime = aud.currentTime;
}); });
} }
// Show controls // Show controls
try { try {
vid.play(); video.play();
aud.play(); aud.play();
} } catch {}
catch {}
if (!setTime) { if (!setTime) {
//FIXME: saved playback intentionally overwritten //FIXME: saved playback intentionally overwritten
aud.currentTime = 0 aud.currentTime = 0;
vid.currentTime = 0 video.currentTime = 0;
seekbar.value = 0 seekbar.value = 0;
setTime = true setTime = true;
}
} }
}
let shouldPlay = 0; let shouldPlay = 0;
const aud = document.getElementById("aud"); const aud = document.getElementById("aud");
const vid = document.getElementById("video"); const vid = document.getElementById("video");
aud.addEventListener("canplay", () => {
shouldPlay++; function checkReadyState() {
if(shouldPlay >= 2) { if (vid.readyState >= 3) { // HAVE_FUTURE_DATA or higher
startPlayback(); if (aud.readyState < 3) {
shouldPlay = 0; aud.load(); // load the audio if not ready
} }
}); if (vid.readyState >= 3 && aud.readyState >= 3) {
startPlayback();
}
}
}
vid.addEventListener("canplay", () => { vid.addEventListener("canplay", () => {
shouldPlay++; shouldPlay++;
if (shouldPlay >= 2) { if (shouldPlay >= 2) {
startPlayback(); checkReadyState();
shouldPlay = 0; shouldPlay = 0;
} }
}); });
})
aud.addEventListener("canplay", () => {
shouldPlay++;
if (shouldPlay >= 2) {
checkReadyState();
shouldPlay = 0;
}
});
});
</script> </script>
<% if(shortsui) { %> <% if(shortsui) { %>
<script> <script>