From 874ac0a0aca95e1a8c24108e3bfe555151bec945 Mon Sep 17 00:00:00 2001
From: Astound <kirito@disroot.org>
Date: Mon, 22 Jan 2024 12:09:52 +0800
Subject: Add autoplay to plyr

---
 youtube/static/js/plyr-start.js | 90 +++++++++++++++++++----------------------
 1 file changed, 42 insertions(+), 48 deletions(-)

diff --git a/youtube/static/js/plyr-start.js b/youtube/static/js/plyr-start.js
index 15e096b..56068f0 100644
--- a/youtube/static/js/plyr-start.js
+++ b/youtube/static/js/plyr-start.js
@@ -8,66 +8,58 @@
   }
 
   // AutoPlay
-  let autoplayActive = data.settings.autoplay_videos === true ? true : false;
+  let autoplayActive = data.settings.autoplay_videos || false;
 
   let qualityOptions = [];
   let qualityDefault;
-  for (let src of data['uni_sources']) {
-    qualityOptions.push(src.quality_string)
+
+  for (let src of data.uni_sources) {
+    qualityOptions.push(src.quality_string);
   }
-  for (let src of data['pair_sources']) {
-    qualityOptions.push(src.quality_string)
+
+  for (let src of data.pair_sources) {
+    qualityOptions.push(src.quality_string);
   }
-  if (data['using_pair_sources'])
-    qualityDefault = data['pair_sources'][data['pair_idx']].quality_string;
-  else if (data['uni_sources'].length != 0)
-    qualityDefault = data['uni_sources'][data['uni_idx']].quality_string;
-  else
+
+  if (data.using_pair_sources) {
+    qualityDefault = data.pair_sources[data.pair_idx].quality_string;
+  } else if (data.uni_sources.length !== 0) {
+    qualityDefault = data.uni_sources[data.uni_idx].quality_string;
+  } else {
     qualityDefault = 'None';
+  }
 
   // Fix plyr refusing to work with qualities that are strings
   Object.defineProperty(Plyr.prototype, 'quality', {
-    set: function(input) {
+    set: function (input) {
       const config = this.config.quality;
       const options = this.options.quality;
-      let quality;
+      let quality = input;
+      let updateStorage = true;
 
       if (!options.length) {
         return;
       }
 
-      // removing this line:
-      //let quality = [!is.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is.number);
-      // replacing with:
-      quality = input;
-      let updateStorage = true;
-
       if (!options.includes(quality)) {
-        // Plyr sets quality to null at startup, resulting in the erroneous
-        // calling of this setter function with input = null, and the
-        // commented out code below would set the quality to something
-        // unrelated at startup. Comment out and just return.
         return;
-        /*const value = closest(options, quality);
-          this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);
-          quality = value; // Don't update storage if quality is not supported
-          updateStorage = false;*/
-      } // Update config
-
+      }
 
-      config.selected = quality; // Set quality
+      // Update config
+      config.selected = quality;
 
-      this.media.quality = quality; // Save to storage
+      // Set quality
+      this.media.quality = quality;
 
+      // Save to storage
       if (updateStorage) {
-        this.storage.set({
-          quality
-        });
+        this.storage.set({ quality });
       }
-    }
+    },
   });
 
   const player = new Plyr(document.getElementById('js-video-player'), {
+    // Learning about autoplay permission https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy/autoplay#syntax
     autoplay: autoplayActive,
     disableContextMenu: false,
     captions: {
@@ -86,29 +78,31 @@
       'settings',
       'pip',
       'airplay',
-      'fullscreen'
+      'fullscreen',
     ],
-    iconUrl: "/youtube.com/static/modules/plyr/plyr.svg",
-    blankVideo: "/youtube.com/static/modules/plyr/blank.webm",
+    iconUrl: '/youtube.com/static/modules/plyr/plyr.svg',
+    blankVideo: '/youtube.com/static/modules/plyr/blank.webm',
     debug: false,
-    storage: {enabled: false},
+    storage: { enabled: false },
     quality: {
       default: qualityDefault,
       options: qualityOptions,
       forced: true,
-      onChange: function(quality) {
-        if (quality == 'None') {return;}
+      onChange: function (quality) {
+        if (quality == 'None') {
+          return;
+        }
         if (quality.includes('(integrated)')) {
-          for (let i=0; i < data['uni_sources'].length; i++) {
-            if (data['uni_sources'][i].quality_string == quality) {
-              changeQuality({'type': 'uni', 'index': i});
+          for (let i = 0; i < data.uni_sources.length; i++) {
+            if (data.uni_sources[i].quality_string == quality) {
+              changeQuality({ type: 'uni', index: i });
               return;
             }
           }
         } else {
-          for (let i=0; i < data['pair_sources'].length; i++) {
-            if (data['pair_sources'][i].quality_string == quality) {
-              changeQuality({'type': 'pair', 'index': i});
+          for (let i = 0; i < data.pair_sources.length; i++) {
+            if (data.pair_sources[i].quality_string == quality) {
+              changeQuality({ type: 'pair', index: i });
               return;
             }
           }
@@ -116,7 +110,7 @@
       },
     },
     previewThumbnails: {
-      enabled: storyboard_url != null,
+      enabled: storyboard_url !== null,
       src: [storyboard_url],
     },
     settings: ['captions', 'quality', 'speed', 'loop'],
@@ -124,4 +118,4 @@
       controls: true,
     },
   });
-}());
+})();
-- 
cgit v1.2.3