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,