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 b1958050c..f90de46a6 100644 --- a/app/src/main/java/com/github/libretube/api/ExternalApi.kt +++ b/app/src/main/java/com/github/libretube/api/ExternalApi.kt @@ -3,12 +3,14 @@ package com.github.libretube.api import com.github.libretube.api.obj.DeArrowBody import com.github.libretube.api.obj.PipedConfig import com.github.libretube.api.obj.PipedInstance +import com.github.libretube.api.obj.SegmentData 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 import retrofit2.http.POST +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.Url @@ -43,6 +45,13 @@ interface ExternalApi { @Query("description") description: String = "" ): List + @GET("$SB_API_URL/api/skipSegments/{videoId}") + suspend fun getSegments( + @Path("videoId") videoId: String, + @Query("category") category: List, + @Query("actionType") actionType: List? = null + ): List + @POST("$SB_API_URL/api/branding") suspend fun submitDeArrow(@Body body: DeArrowBody) diff --git a/app/src/main/java/com/github/libretube/api/NewPipeMediaServiceRepository.kt b/app/src/main/java/com/github/libretube/api/NewPipeMediaServiceRepository.kt index d49121c6a..96445f9bb 100644 --- a/app/src/main/java/com/github/libretube/api/NewPipeMediaServiceRepository.kt +++ b/app/src/main/java/com/github/libretube/api/NewPipeMediaServiceRepository.kt @@ -48,6 +48,7 @@ import org.schabi.newpipe.extractor.stream.AudioStream import org.schabi.newpipe.extractor.stream.StreamInfo import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.VideoStream +import java.security.MessageDigest private fun VideoStream.toPipedStream() = PipedStream( @@ -319,11 +320,24 @@ class NewPipeMediaServiceRepository : MediaServiceRepository { ) } + @OptIn(ExperimentalStdlibApi::class) override suspend fun getSegments( videoId: String, - category: String, - actionType: String? - ): SegmentData = SegmentData() + category: List, + actionType: List? + ): SegmentData { + // use hashed video id for privacy + // https://wiki.sponsor.ajay.app/w/API_Docs#GET_/api/skipSegments/:sha256HashPrefix + val hashedId = MessageDigest.getInstance("SHA-256") + .digest(videoId.toByteArray()) + .toHexString() + + return RetrofitInstance.externalApi.getSegments( + hashedId.substring(0..4), + category, + actionType + ).first { it.videoID == videoId } + } override suspend fun getDeArrowContent(videoIds: String): Map = emptyMap()