From 7bc7ac43225c4b82917446d8bb4bc8d73102e867 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C4=81nis?= <97699850+janisslsm@users.noreply.github.com>
Date: Tue, 10 Sep 2024 19:33:42 +0300
Subject: [PATCH 1/4] feat: RYD support for local stream extraction
---
.../com/github/libretube/api/ExternalApi.kt | 5 +++++
.../github/libretube/api/StreamsExtractor.kt | 1 +
.../com/github/libretube/api/obj/VoteInfo.kt | 17 +++++++++++++++++
3 files changed, 23 insertions(+)
create mode 100644 app/src/main/java/com/github/libretube/api/obj/VoteInfo.kt
diff --git a/app/src/main/java/com/github/libretube/api/ExternalApi.kt b/app/src/main/java/com/github/libretube/api/ExternalApi.kt
index ab63bebc03..b8107dd466 100644
--- a/app/src/main/java/com/github/libretube/api/ExternalApi.kt
+++ b/app/src/main/java/com/github/libretube/api/ExternalApi.kt
@@ -3,6 +3,7 @@ package com.github.libretube.api
import com.github.libretube.api.obj.DeArrowBody
import com.github.libretube.api.obj.PipedInstance
import com.github.libretube.api.obj.SubmitSegmentResponse
+import com.github.libretube.api.obj.VoteInfo
import com.github.libretube.obj.update.UpdateInfo
import retrofit2.http.Body
import retrofit2.http.GET
@@ -12,6 +13,7 @@ import retrofit2.http.Url
private const val GITHUB_API_URL = "https://api.github.com/repos/libre-tube/LibreTube/releases/latest"
private const val SB_API_URL = "https://sponsor.ajay.app"
+private const val RYD_API_URL = "https://returnyoutubedislikeapi.com"
interface ExternalApi {
// only for fetching servers list
@@ -22,6 +24,9 @@ interface ExternalApi {
@GET(GITHUB_API_URL)
suspend fun getLatestRelease(): UpdateInfo
+ @GET("$RYD_API_URL/votes")
+ suspend fun getVotes(@Query("videoId") videoId: String): VoteInfo
+
@POST("$SB_API_URL/api/skipSegments")
suspend fun submitSegment(
@Query("videoID") videoId: String,
diff --git a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
index e1e10d9515..8181fd6c0f 100644
--- a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
+++ b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
@@ -58,6 +58,7 @@ object StreamsExtractor {
category = resp.category,
views = resp.viewCount,
likes = resp.likeCount,
+ dislikes = RetrofitInstance.externalApi.getVotes(videoId).dislikes,
license = resp.licence,
hls = resp.hlsUrl,
dash = resp.dashMpdUrl,
diff --git a/app/src/main/java/com/github/libretube/api/obj/VoteInfo.kt b/app/src/main/java/com/github/libretube/api/obj/VoteInfo.kt
new file mode 100644
index 0000000000..e6c8bcc268
--- /dev/null
+++ b/app/src/main/java/com/github/libretube/api/obj/VoteInfo.kt
@@ -0,0 +1,17 @@
+package com.github.libretube.api.obj
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+import kotlinx.serialization.Serializable
+
+@Serializable
+@Parcelize
+data class VoteInfo(
+ val likes: Long,
+ val rawDislikes: Long,
+ val rawLikes: Long,
+ val dislikes: Long,
+ val rating: Float,
+ val viewCount: Long,
+ val deleted: Boolean
+) : Parcelable
From a9e4a4155930dd16dcc994d1d2b2a2462915a09b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C4=81nis?= <97699850+janisslsm@users.noreply.github.com>
Date: Thu, 12 Sep 2024 19:54:53 +0300
Subject: [PATCH 2/4] add a switch
---
.../java/com/github/libretube/api/StreamsExtractor.kt | 4 +++-
.../java/com/github/libretube/constants/PreferenceKeys.kt | 1 +
.../java/com/github/libretube/helpers/PlayerHelper.kt | 6 ++++++
app/src/main/res/values/strings.xml | 2 ++
app/src/main/res/xml/instance_settings.xml | 8 ++++++++
5 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
index 8181fd6c0f..8bae4bd458 100644
--- a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
+++ b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
@@ -58,7 +58,9 @@ object StreamsExtractor {
category = resp.category,
views = resp.viewCount,
likes = resp.likeCount,
- dislikes = RetrofitInstance.externalApi.getVotes(videoId).dislikes,
+ dislikes = if (PlayerHelper.localRYD)
+ RetrofitInstance.externalApi.getVotes(videoId).dislikes
+ else 0,
license = resp.licence,
hls = resp.hlsUrl,
dash = resp.dashMpdUrl,
diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt
index 7f0ae36741..14c7160b4c 100644
--- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt
+++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt
@@ -128,6 +128,7 @@ object PreferenceKeys {
const val MAX_CONCURRENT_DOWNLOADS = "max_parallel_downloads"
const val EXTERNAL_DOWNLOAD_PROVIDER = "external_download_provider"
const val DISABLE_VIDEO_IMAGE_PROXY = "disable_video_image_proxy"
+ const val LOCAL_RYD = "local_return_youtube_dislikes"
const val LOCAL_STREAM_EXTRACTION = "local_stream_extraction"
// History
diff --git a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
index 40a762c9b1..22ff62a93f 100644
--- a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
+++ b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
@@ -356,6 +356,12 @@ object PlayerHelper {
true
)
+ val localRYD: Boolean
+ get() = PreferenceHelper.getBoolean(
+ PreferenceKeys.LOCAL_RYD,
+ true
+ )
+
val useHlsOverDash: Boolean
get() = PreferenceHelper.getBoolean(
PreferenceKeys.USE_HLS_OVER_DASH,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b427dd1bcf..4fcae4f379 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -512,6 +512,8 @@
Enter the package name of the app you want to use for downloading videos. Leave blank to use LibreTube\'s inbuilt downloader.
Local stream extraction
Directly fetch video playback information from YouTube without using Piped.
+ Local Return Youtube Dislikes
+ Directly fetch dislike information from https://returnyoutubedislikeapi.com
Download Service
diff --git a/app/src/main/res/xml/instance_settings.xml b/app/src/main/res/xml/instance_settings.xml
index 578e36d759..37034dc1aa 100644
--- a/app/src/main/res/xml/instance_settings.xml
+++ b/app/src/main/res/xml/instance_settings.xml
@@ -81,6 +81,14 @@
android:dependency="disable_video_image_proxy"
app:key="local_stream_extraction" />
+
+
\ No newline at end of file
From fb03e47e7063e3761666e9509befec29827b4148 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C4=81nis?= <97699850+janisslsm@users.noreply.github.com>
Date: Sat, 14 Sep 2024 07:42:18 +0300
Subject: [PATCH 3/4] use runCatching
---
.../java/com/github/libretube/api/StreamsExtractor.kt | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
index 8bae4bd458..02f8a470be 100644
--- a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
+++ b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
@@ -58,9 +58,11 @@ object StreamsExtractor {
category = resp.category,
views = resp.viewCount,
likes = resp.likeCount,
- dislikes = if (PlayerHelper.localRYD)
- RetrofitInstance.externalApi.getVotes(videoId).dislikes
- else 0,
+ dislikes = runCatching {
+ if (PlayerHelper.localRYD)
+ RetrofitInstance.externalApi.getVotes(videoId).dislikes
+ else 0
+ }.getOrElse { 0 },
license = resp.licence,
hls = resp.hlsUrl,
dash = resp.dashMpdUrl,
From ebc0c770df3332d752e8110a3754fb49a9c27b75 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C4=81nis?= <97699850+janisslsm@users.noreply.github.com>
Date: Sat, 14 Sep 2024 12:33:39 +0300
Subject: [PATCH 4/4] move check outside if statement
additionally return -1 if no dislikes were fetched.
Co-authored-by: Bnyro
---
.../java/com/github/libretube/api/StreamsExtractor.kt | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
index 02f8a470be..236ee7d369 100644
--- a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
+++ b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt
@@ -58,11 +58,9 @@ object StreamsExtractor {
category = resp.category,
views = resp.viewCount,
likes = resp.likeCount,
- dislikes = runCatching {
- if (PlayerHelper.localRYD)
- RetrofitInstance.externalApi.getVotes(videoId).dislikes
- else 0
- }.getOrElse { 0 },
+ dislikes = if (PlayerHelper.localRYD) runCatching {
+ RetrofitInstance.externalApi.getVotes(videoId).dislikes
+ }.getOrElse { -1 } else -1,
license = resp.licence,
hls = resp.hlsUrl,
dash = resp.dashMpdUrl,