From c5986034504f4785913198ab24e6a3e0f73c8b86 Mon Sep 17 00:00:00 2001 From: Nikita Krupin Date: Fri, 29 Jul 2022 00:44:26 -0400 Subject: [PATCH] player settings: preload --- NUXT/components/Player/index.vue | 53 ++++++--- NUXT/pages/mods/player.vue | 179 ++++++++++++++++++++++--------- NUXT/pages/mods/theme.vue | 2 +- NUXT/pages/mods/tweaks.vue | 10 +- NUXT/pages/watch.vue | 2 +- NUXT/store/player/index.js | 7 ++ 6 files changed, 180 insertions(+), 73 deletions(-) diff --git a/NUXT/components/Player/index.vue b/NUXT/components/Player/index.vue index 2f1438a..052d815 100644 --- a/NUXT/components/Player/index.vue +++ b/NUXT/components/Player/index.vue @@ -33,8 +33,12 @@ :height="isFullscreen ? '100%' : 'auto'" style="transition: filter 0.15s ease-in-out, transform 0.15s linear" :class=" - controls || seeking || skipping - ? verticalFullscreen + controls || + seeking || + skipping || + ($store.state.player.preload && buffered < 100) + ? verticalFullscreen && + !($store.state.player.preload && buffered < 100) ? 'dim-ish' : 'dim' : '' @@ -137,6 +141,7 @@
+ + + {{ buffered }}% +
@@ -381,7 +402,7 @@ export default { let vid = this.$refs.player; // TODO: this.$store.state.player.quality, check if exists and select the closest one - if (this.$store.state.player.prebuffer) this.prebuffer(this.sources[0].url); + if (this.$store.state.player.preload) this.prebuffer(this.sources[0].url); else { this.audSrc = this.sources[this.sources.length - 1].url; this.vidSrc = this.sources[0].url; @@ -439,26 +460,29 @@ export default { ); }, beforeDestroy() { + this.xhr.abort(); if (this.isFullscreen) this.exitFullscreen(); screen.orientation.removeEventListener("change"); }, methods: { prebuffer(url) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, true); - xhr.responseType = "blob"; + this.xhr = new XMLHttpRequest(); + this.xhr.open("GET", url, true); + this.xhr.responseType = "blob"; - xhr.addEventListener( + this.xhr.addEventListener( "load", () => { - if (xhr.status === 200) { - var blob = xhr.response; + if (this.xhr.status === 200) { + var blob = this.xhr.response; + console.error(this.xhr); this.blobToDataURL(blob, (dataurl) => { console.log(dataurl); this.vidSrc = dataurl; + this.buffered = 100; }); } else { - console.error("errorred pre-fetch", xhr.status); + console.error("errorred pre-fetch", this.xhr.status); } }, false @@ -466,17 +490,18 @@ export default { var prev_pc = 0; // TODO: big progress overlay (##%) to replace controls while loading if pre-buffering is enabled - xhr.addEventListener("progress", (event) => { + this.xhr.addEventListener("progress", (event) => { if (event.lengthComputable) { var pc = Math.round((event.loaded / event.total) * 100); if (pc != prev_pc) { prev_pc = pc; // ##% - console.log("buffering progress", pc); + if (pc < 100) this.buffered = pc; + console.warn(this.xhr); } } }); - xhr.send(); + this.xhr.send(); }, blobToDataURL(blob, callback) { var a = new FileReader(); diff --git a/NUXT/pages/mods/player.vue b/NUXT/pages/mods/player.vue index bab9dce..5ff7061 100644 --- a/NUXT/pages/mods/player.vue +++ b/NUXT/pages/mods/player.vue @@ -6,63 +6,92 @@ - + - +

mdi-speedometer @@ -79,7 +108,7 @@ > + {}, + value: false, + name: "Mute", + icon: "mdi-volume-off", + disabled: true, + }, + { + action: () => { + this.loop = !this.loop; + }, + value: this.loop, + name: "Loop", + icon: "mdi-sync-circle", + }, + ], + }; + }, }, }; diff --git a/NUXT/pages/mods/theme.vue b/NUXT/pages/mods/theme.vue index 6d3ec40..8be24ba 100644 --- a/NUXT/pages/mods/theme.vue +++ b/NUXT/pages/mods/theme.vue @@ -126,7 +126,7 @@
diff --git a/NUXT/pages/watch.vue b/NUXT/pages/watch.vue index 5b82f8d..b688faa 100644 --- a/NUXT/pages/watch.vue +++ b/NUXT/pages/watch.vue @@ -53,7 +53,7 @@ mdi-chevron-down