From b83f06cf1fc012af263ee6ab2100664afd497145 Mon Sep 17 00:00:00 2001 From: Holger Frovin Jensen Date: Sun, 5 Dec 2021 05:56:03 +0100 Subject: [PATCH] Actually works now --- src/components/Player.vue | 23 ++++++++++++++++++++++- src/components/Playlist.vue | 4 ++-- src/components/VideoItem.vue | 19 +++++++++++++++++-- src/components/WatchVideo.vue | 21 +++++++++++++++++---- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/src/components/Player.vue b/src/components/Player.vue index 5c9b4ce0..c6c5974e 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -31,6 +31,12 @@ export default { return {}; }, }, + playlist: { + type: Object, + default: () => { + return {}; + }, + }, sponsors: { type: Object, default: () => { @@ -40,6 +46,7 @@ export default { selectedAutoPlay: Boolean, selectedAutoLoop: Boolean, isEmbed: Boolean, + isPlaylist: Boolean, }, data() { return { @@ -328,13 +335,27 @@ export default { videoEl.addEventListener("ended", () => { if (!this.selectedAutoLoop && this.selectedAutoPlay && this.video.relatedStreams.length > 0) { const params = this.$route.query; - let url = this.video.relatedStreams[0].url; + let index = Number(params.index).valueOf(); const searchParams = new URLSearchParams(); + let isPlaylist = this.isPlaylist; + let url = + isPlaylist && index > this.playlist.relatedStreams.length + ? this.playlist.relatedStreams[index].url + : this.video.relatedStreams[0].url; + let playlistEnded = index == this.playlist.relatedStreams.length; for (var param in params) switch (param) { case "v": case "t": break; + case "index": + if (playlistEnded) { + searchParams.delete("index"); + } else searchParams.set(param, index + 1); + break; + case "list": + if (playlistEnded) searchParams.delete("list"); + break; default: searchParams.set(param, params[param]); break; diff --git a/src/components/Playlist.vue b/src/components/Playlist.vue index 35ace3ed..4f8243bb 100644 --- a/src/components/Playlist.vue +++ b/src/components/Playlist.vue @@ -70,8 +70,8 @@ export default { this.fetchPlaylist() .then(data => (this.playlist = data)) .then(() => - this.playlist.relatedStreams.forEach(video => { - video.url += "&list=" + this.$route.query.list; + this.playlist.relatedStreams.forEach((video, i) => { + video.url += "&list=" + this.$route.query.list + "&index=" + (i + 1); }), ) .then(() => (document.title = this.playlist.name + " - Piped")); diff --git a/src/components/VideoItem.vue b/src/components/VideoItem.vue index ce545379..af9f3a12 100644 --- a/src/components/VideoItem.vue +++ b/src/components/VideoItem.vue @@ -1,6 +1,13 @@