// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later function setup_playback(description) { video_manifest = description; console.log(description); player = document.getElementById("player"); player.addEventListener("pause", (event) => playStateChanged(false)); player.addEventListener("playing", (event) => playStateChanged(true)); filteredOptions = filterOptions(description.entries); if(filteredOptions.length == 0){ player.src = "invalid://invalid"; document.getElementById("unplayable-modal").showModal(); return; } player.src = filteredOptions[0].path; qualitySelector = document.getElementById("quality-selector"); filteredOptions.forEach(option => { opt = document.createElement("option") opt.value = option.path; opt.innerHTML = option.label; qualitySelector.appendChild(opt); }); startRes = findOptimalOptionForScreen(filteredOptions); qualitySelector.value = startRes.path qualitySelected(); } function qualitySelected() { qualitySelector = document.getElementById("quality-selector"); player = document.getElementById("player"); time = player.currentTime; paused = player.paused; player.src = qualitySelector.value; player.currentTime = time; if(!paused) { player.play(); } } function filterOptions(options) { player = document.getElementById("player"); return options.filter(o => o.type === "video" && player.canPlayType(`${o.mimetype}; codecs="${o.metadata.codecs}"`)); } function findOptimalOptionForScreen(options) { screenSize = Math.max(window.screen.width, window.screen.height); filtered = options.filter(o => o.type === "video" && Math.max(o.metadata.size.split("x")[0], o.metadata.size.split("x")[1]) <= screenSize); console.log(filtered); if(filtered.length == 0){ return options[options.length - 1]; } return filtered[0]; } function downloadVideo() { document.getElementById("download-modal").showModal(); } function showInfo() { document.getElementById("info-modal").showModal(); } function shareVideo() { document.getElementById("share-modal").showModal(); } function playStateChanged(playing) { controls = document.getElementById("controls") if(playing) { controls.classList.remove("paused") } else { controls.classList.add("paused") } } // @license-end