From 10ba5891a36812a422bf5e92d4011cebe28e91d3 Mon Sep 17 00:00:00 2001 From: Alin Date: Tue, 14 Feb 2023 17:51:01 +0000 Subject: [PATCH 1/5] prioritize unwatched videos from the same channel --- src/components/VideoPlayer.vue | 45 +++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/components/VideoPlayer.vue b/src/components/VideoPlayer.vue index 7a3012ac8b..c7f7b69558 100644 --- a/src/components/VideoPlayer.vue +++ b/src/components/VideoPlayer.vue @@ -51,6 +51,7 @@ export default { lastUpdate: new Date().getTime(), initialSeekComplete: false, destroying: false, + nextVideo: null, }; }, computed: { @@ -395,6 +396,7 @@ export default { } }); } + this.setNextVideo(); //TODO: Add sponsors on seekbar: https://github.com/ajayyy/SponsorBlock/blob/e39de9fd852adb9196e0358ed827ad38d9933e29/src/js-components/previewBar.ts#L12 }, @@ -585,9 +587,50 @@ export default { this.$refs.videoEl.currentTime = time; } }, + async getWatchedRelatedVideos() { + var tx = window.db.transaction("watch_history", "readwrite"); + var store = tx.objectStore("watch_history"); + const results = []; + for (let i = 0; i < this.video.relatedStreams.length; i++) { + const video = this.video.relatedStreams[i]; + const id = video.url.replace("/watch?v=", ""); + const request = store.get(id); + results.push(request); + } + const data = results.map(result => { + return new Promise(resolve => { + result.onsuccess = function (event) { + const video = event.target.result; + resolve(video); + }; + result.onerror = function () { + resolve(null); + }; + }); + }); + return Promise.all(data); + }, + async setNextVideo() { + const data = (await this.getWatchedRelatedVideos()).filter(video => video); + for (let i = 0; i < this.video.relatedStreams.length; i++) { + const video = this.video.relatedStreams[i]; + const id = video.url.replace("/watch?v=", ""); + const watched = data.find(video => video.videoId === id); + if (!watched) { + if (video.uploaderUrl === this.video.uploaderUrl) { + this.nextVideo = video; + return; + } + this.nextVideo = video; + return; + } + this.nextVideo = this.video.relatedStreams[0]; + } + }, navigateNext() { const params = this.$route.query; - let url = this.playlist?.relatedStreams?.[this.index]?.url ?? this.video.relatedStreams[0].url; + const relatedUrl = this.nextVideo?.url ?? this.video.relatedStreams[0].url; + let url = this.playlist?.relatedStreams?.[this.index]?.url ?? relatedUrl; const searchParams = new URLSearchParams(); for (var param in params) switch (param) { From f4b370945a1012c4e1a697a675dbbe8061a729f7 Mon Sep 17 00:00:00 2001 From: Alin Date: Wed, 15 Feb 2023 12:34:33 +0000 Subject: [PATCH 2/5] add setting --- src/components/PreferencesPage.vue | 22 ++++++++++++++++++++++ src/components/VideoPlayer.vue | 7 ++++++- src/locales/en.json | 2 ++ src/main.js | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/components/PreferencesPage.vue b/src/components/PreferencesPage.vue index 507c598ac9..886251f806 100644 --- a/src/components/PreferencesPage.vue +++ b/src/components/PreferencesPage.vue @@ -45,6 +45,25 @@ @change="onChange($event)" /> +