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 aecdabd5f1..02bb5067ae 100644 --- a/app/src/main/java/com/github/libretube/api/ExternalApi.kt +++ b/app/src/main/java/com/github/libretube/api/ExternalApi.kt @@ -64,6 +64,11 @@ interface ExternalApi { @Query("actionType") actionType: List? = null ): List + @GET("$SB_API_URL/api/videoLabels/{videoId}") + suspend fun getVideoLabels( + @Path("videoId") videoId: String, + ): List + @POST("$SB_API_URL/api/branding") suspend fun submitDeArrow(@Body body: DeArrowBody) diff --git a/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt b/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt index f50707a169..25eea2a0da 100644 --- a/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt +++ b/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt @@ -9,6 +9,7 @@ import com.github.libretube.api.obj.SearchResult import com.github.libretube.api.obj.SegmentData import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.Streams +import com.github.libretube.extensions.sha256Sum import com.github.libretube.helpers.PlayerHelper interface MediaServiceRepository { @@ -21,6 +22,13 @@ interface MediaServiceRepository { actionType: List? = null ): SegmentData + suspend fun getVideoLabels(videoId: String + ): SegmentData? = RetrofitInstance.externalApi.getVideoLabels( + // use hashed video id for privacy + // https://wiki.sponsor.ajay.app/w/API_Docs/Draft#GET_/api/videoLabels/:sha256HashPrefix + videoId.sha256Sum().substring(0, 4), + ).firstOrNull { it.videoID == videoId } + suspend fun getDeArrowContent(videoIds: String): Map suspend fun getCommentsNextPage(videoId: String, nextPage: String): CommentsPage suspend fun getSearchResults(searchQuery: String, filter: String): SearchResult diff --git a/app/src/main/java/com/github/libretube/api/obj/Segment.kt b/app/src/main/java/com/github/libretube/api/obj/Segment.kt index 0b7068fad2..0937a02bd1 100644 --- a/app/src/main/java/com/github/libretube/api/obj/Segment.kt +++ b/app/src/main/java/com/github/libretube/api/obj/Segment.kt @@ -16,7 +16,7 @@ data class Segment( val category: String? = null, val description: String? = null, val locked: Int? = null, - private val segment: List = listOf(), + private val segment: List = listOf(0f, 0f), val userID: String? = null, val videoDuration: Double? = null, val votes: Int? = null, diff --git a/app/src/main/java/com/github/libretube/ui/adapters/VideoCardsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/VideoCardsAdapter.kt index 213a6105a2..df13e73494 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/VideoCardsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/VideoCardsAdapter.kt @@ -4,8 +4,10 @@ import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.os.bundleOf +import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.ListAdapter +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.IntentData import com.github.libretube.databinding.AllCaughtUpRowBinding @@ -21,6 +23,10 @@ import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.VideoCardsViewHolder import com.github.libretube.util.TextUtils +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class VideoCardsAdapter(private val columnWidthDp: Float? = null) : ListAdapter(DiffUtilItemCallback()) { @@ -107,6 +113,14 @@ class VideoCardsAdapter(private val columnWidthDp: Float? = null) : sheet.show(fragmentManager, VideoCardsAdapter::class.java.name) true } + + CoroutineScope(Dispatchers.IO).launch { + val sponsor = runCatching { MediaServiceRepository.instance.getVideoLabels(videoId) }.getOrNull() + + withContext(Dispatchers.Main) { + sponsorBadge.isVisible = sponsor?.segments?.isNotEmpty() == true + } + } } } diff --git a/app/src/main/res/layout/trending_row.xml b/app/src/main/res/layout/trending_row.xml index 82ca95fd1e..a6f527b2df 100644 --- a/app/src/main/res/layout/trending_row.xml +++ b/app/src/main/res/layout/trending_row.xml @@ -29,6 +29,32 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + + + + +