diff --git a/app/src/main/java/com/github/libretube/api/SubscriptionHelper.kt b/app/src/main/java/com/github/libretube/api/SubscriptionHelper.kt index a49890426..464abdfce 100644 --- a/app/src/main/java/com/github/libretube/api/SubscriptionHelper.kt +++ b/app/src/main/java/com/github/libretube/api/SubscriptionHelper.kt @@ -43,7 +43,10 @@ object SubscriptionHelper { else -> PipedNoAccountFeedRepository() } - suspend fun subscribe(channelId: String) = subscriptionsRepository.subscribe(channelId) + suspend fun subscribe( + channelId: String, name: String, uploaderAvatar: String?, verified: Boolean + ) = subscriptionsRepository.subscribe(channelId, name, uploaderAvatar, verified) + suspend fun unsubscribe(channelId: String) = subscriptionsRepository.unsubscribe(channelId) suspend fun isSubscribed(channelId: String) = subscriptionsRepository.isSubscribed(channelId) suspend fun importSubscriptions(newChannels: List) = diff --git a/app/src/main/java/com/github/libretube/repo/AccountSubscriptionsRepository.kt b/app/src/main/java/com/github/libretube/repo/AccountSubscriptionsRepository.kt index 270de8b19..6743d032f 100644 --- a/app/src/main/java/com/github/libretube/repo/AccountSubscriptionsRepository.kt +++ b/app/src/main/java/com/github/libretube/repo/AccountSubscriptionsRepository.kt @@ -6,10 +6,12 @@ import com.github.libretube.api.obj.Subscription import com.github.libretube.extensions.toID import com.github.libretube.helpers.PreferenceHelper -class AccountSubscriptionsRepository: SubscriptionsRepository { +class AccountSubscriptionsRepository : SubscriptionsRepository { private val token get() = PreferenceHelper.getToken() - override suspend fun subscribe(channelId: String) { + override suspend fun subscribe( + channelId: String, name: String, uploaderAvatar: String?, verified: Boolean + ) { runCatching { RetrofitInstance.authApi.subscribe(token, Subscribe(channelId)) } diff --git a/app/src/main/java/com/github/libretube/repo/LocalSubscriptionsRepository.kt b/app/src/main/java/com/github/libretube/repo/LocalSubscriptionsRepository.kt index d380c7813..880179fb7 100644 --- a/app/src/main/java/com/github/libretube/repo/LocalSubscriptionsRepository.kt +++ b/app/src/main/java/com/github/libretube/repo/LocalSubscriptionsRepository.kt @@ -7,16 +7,15 @@ import com.github.libretube.extensions.parallelMap import com.github.libretube.ui.dialogs.ShareDialog.Companion.YOUTUBE_FRONTEND_URL import org.schabi.newpipe.extractor.channel.ChannelInfo -class LocalSubscriptionsRepository: SubscriptionsRepository { - override suspend fun subscribe(channelId: String) { - val channelUrl = "$YOUTUBE_FRONTEND_URL/channel/${channelId}" - val channelInfo = ChannelInfo.getInfo(channelUrl) - +class LocalSubscriptionsRepository : SubscriptionsRepository { + override suspend fun subscribe( + channelId: String, name: String, uploaderAvatar: String?, verified: Boolean + ) { val localSubscription = LocalSubscription( - channelId = channelInfo.id, - name = channelInfo.name, - avatar = channelInfo.avatars.maxByOrNull { it.height }?.url, - verified = channelInfo.isVerified + channelId = channelId, + name = name, + avatar = uploaderAvatar, + verified = verified ) Database.localSubscriptionDao().insert(localSubscription) @@ -33,7 +32,10 @@ class LocalSubscriptionsRepository: SubscriptionsRepository { override suspend fun importSubscriptions(newChannels: List) { for (chunk in newChannels.chunked(CHANNEL_CHUNK_SIZE)) { chunk.parallelMap { channelId -> - runCatching { subscribe(channelId) } + val channelUrl = "$YOUTUBE_FRONTEND_URL/channel/${channelId}" + val channelInfo = ChannelInfo.getInfo(channelUrl) + + runCatching { subscribe(channelId, channelInfo.name, channelInfo.avatars.maxByOrNull { it.height }?.url, channelInfo.isVerified) } } } } diff --git a/app/src/main/java/com/github/libretube/repo/PipedLocalSubscriptionsRepository.kt b/app/src/main/java/com/github/libretube/repo/PipedLocalSubscriptionsRepository.kt index d19645519..d7053e197 100644 --- a/app/src/main/java/com/github/libretube/repo/PipedLocalSubscriptionsRepository.kt +++ b/app/src/main/java/com/github/libretube/repo/PipedLocalSubscriptionsRepository.kt @@ -6,8 +6,10 @@ import com.github.libretube.api.obj.Subscription import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.obj.LocalSubscription -class PipedLocalSubscriptionsRepository: SubscriptionsRepository { - override suspend fun subscribe(channelId: String) { +class PipedLocalSubscriptionsRepository : SubscriptionsRepository { + override suspend fun subscribe( + channelId: String, name: String, uploaderAvatar: String?, verified: Boolean + ) { // further meta info is not needed when using Piped local subscriptions Database.localSubscriptionDao().insert(LocalSubscription(channelId)) } @@ -29,9 +31,9 @@ class PipedLocalSubscriptionsRepository: SubscriptionsRepository { val channelIds = getSubscriptionChannelIds() return when { - channelIds.size > GET_SUBSCRIPTIONS_LIMIT -> - RetrofitInstance.authApi - .unauthenticatedSubscriptions(channelIds) + channelIds.size > GET_SUBSCRIPTIONS_LIMIT -> RetrofitInstance.authApi.unauthenticatedSubscriptions( + channelIds + ) else -> RetrofitInstance.authApi.unauthenticatedSubscriptions( channelIds.joinToString(",") diff --git a/app/src/main/java/com/github/libretube/repo/SubscriptionsRepository.kt b/app/src/main/java/com/github/libretube/repo/SubscriptionsRepository.kt index e97b0e919..f6c68a91f 100644 --- a/app/src/main/java/com/github/libretube/repo/SubscriptionsRepository.kt +++ b/app/src/main/java/com/github/libretube/repo/SubscriptionsRepository.kt @@ -3,7 +3,7 @@ package com.github.libretube.repo import com.github.libretube.api.obj.Subscription interface SubscriptionsRepository { - suspend fun subscribe(channelId: String) + suspend fun subscribe(channelId: String, name: String, uploaderAvatar: String?, verified: Boolean) suspend fun unsubscribe(channelId: String) suspend fun isSubscribed(channelId: String): Boolean? suspend fun importSubscriptions(newChannels: List) diff --git a/app/src/main/java/com/github/libretube/ui/adapters/SearchResultsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/SearchResultsAdapter.kt index 55ef3b965..21c015716 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/SearchResultsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/SearchResultsAdapter.kt @@ -159,7 +159,12 @@ class SearchResultsAdapter( } var subscribed = false - binding.searchSubButton.setupSubscriptionButton(item.url.toID(), item.name?.toID()) { + binding.searchSubButton.setupSubscriptionButton( + item.url.toID(), + item.name.orEmpty(), + item.uploaderAvatar, + item.uploaderVerified ?: false + ) { subscribed = it } diff --git a/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt index d026670e8..6186c4e3b 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt @@ -52,6 +52,8 @@ class SubscriptionChannelAdapter : subscriptionSubscribe.setupSubscriptionButton( subscription.url.toID(), subscription.name, + subscription.avatar, + subscription.verified, notificationBell, true ) diff --git a/app/src/main/java/com/github/libretube/ui/extensions/SetupSubscriptionButton.kt b/app/src/main/java/com/github/libretube/ui/extensions/SetupSubscriptionButton.kt index d3a1f3b82..6d40e3aa7 100644 --- a/app/src/main/java/com/github/libretube/ui/extensions/SetupSubscriptionButton.kt +++ b/app/src/main/java/com/github/libretube/ui/extensions/SetupSubscriptionButton.kt @@ -15,7 +15,9 @@ import kotlinx.coroutines.withContext fun TextView.setupSubscriptionButton( channelId: String?, - channelName: String?, + channelName: String, + channelAvatar: String?, + channelVerified: Boolean, notificationBell: MaterialButton? = null, isSubscribed: Boolean? = null, onIsSubscribedChange: (Boolean) -> Unit = {} @@ -53,7 +55,7 @@ fun TextView.setupSubscriptionButton( } else { CoroutineScope(Dispatchers.Main).launch { withContext(Dispatchers.IO) { - SubscriptionHelper.subscribe(channelId) + SubscriptionHelper.subscribe(channelId, channelName, channelAvatar, channelVerified) } text = context.getString(R.string.unsubscribe) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt index 483aec078..7660f7816 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt @@ -150,7 +150,9 @@ class ChannelFragment : DynamicLayoutManagerFragment(R.layout.fragment_channel) binding.channelSubscribe.setupSubscriptionButton( channelId, - channelName, + response.name.orEmpty(), + response.avatarUrl, + response.verified, binding.notificationBell ) { isSubscribed -> _binding?.addToGroup?.isVisible = isSubscribed diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 9ab8cfbc4..0c3e1b016 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -1147,8 +1147,10 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions { // update the subscribed state binding.playerSubscribe.setupSubscriptionButton( - this.streams.uploaderUrl.toID(), - this.streams.uploader + streams.uploaderUrl.toID(), + streams.uploader, + streams.uploaderAvatar, + streams.uploaderVerified ) // seekbar preview setup