ppvm_player.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
  2. function setup_playback(description) {
  3. video_manifest = description;
  4. console.log(description);
  5. player = document.getElementById("player");
  6. player.addEventListener("pause", (event) => playStateChanged(false));
  7. player.addEventListener("playing", (event) => playStateChanged(true));
  8. filteredOptions = filterOptions(description.entries);
  9. if(filteredOptions.length == 0){
  10. player.src = "invalid://invalid";
  11. document.getElementById("unplayable-modal").showModal();
  12. return;
  13. }
  14. player.src = filteredOptions[0].path;
  15. qualitySelector = document.getElementById("quality-selector");
  16. filteredOptions.forEach(option => {
  17. opt = document.createElement("option")
  18. opt.value = option.path;
  19. opt.innerHTML = option.label;
  20. qualitySelector.appendChild(opt);
  21. });
  22. startRes = findOptimalOptionForScreen(filteredOptions);
  23. qualitySelector.value = startRes.path
  24. qualitySelected();
  25. }
  26. function qualitySelected() {
  27. qualitySelector = document.getElementById("quality-selector");
  28. player = document.getElementById("player");
  29. time = player.currentTime;
  30. paused = player.paused;
  31. player.src = qualitySelector.value;
  32. player.currentTime = time;
  33. if(!paused) {
  34. player.play();
  35. }
  36. }
  37. function filterOptions(options) {
  38. player = document.getElementById("player");
  39. return options.filter(o => o.type === "video" && player.canPlayType(`${o.mimetype}; codecs="${o.metadata.codecs}"`));
  40. }
  41. function findOptimalOptionForScreen(options) {
  42. screenSize = Math.max(window.screen.width, window.screen.height);
  43. filtered = options.filter(o => o.type === "video" && Math.max(o.metadata.size.split("x")[0], o.metadata.size.split("x")[1]) <= screenSize);
  44. console.log(filtered);
  45. if(filtered.length == 0){
  46. return options[options.length - 1];
  47. }
  48. return filtered[0];
  49. }
  50. function downloadVideo() {
  51. document.getElementById("download-modal").showModal();
  52. }
  53. function showInfo() {
  54. document.getElementById("info-modal").showModal();
  55. }
  56. function shareVideo() {
  57. document.getElementById("share-modal").showModal();
  58. }
  59. function playStateChanged(playing) {
  60. controls = document.getElementById("controls")
  61. if(playing) {
  62. controls.classList.remove("paused")
  63. }
  64. else {
  65. controls.classList.add("paused")
  66. }
  67. }
  68. // @license-end