feat: support for filtering by group in subscriptions -> channels

This commit is contained in:
Bnyro 2024-02-25 14:21:25 +01:00
parent 1257ed44b9
commit f0a779b4d1

View File

@ -17,7 +17,9 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.obj.Channel
import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.StreamItem
import com.github.libretube.api.obj.Subscription
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.FragmentSubscriptionsBinding import com.github.libretube.databinding.FragmentSubscriptionsBinding
@ -165,7 +167,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() {
binding.channelGroups.setOnCheckedStateChangeListener { group, checkedIds -> binding.channelGroups.setOnCheckedStateChangeListener { group, checkedIds ->
selectedFilterGroup = group.children.indexOfFirst { it.id == checkedIds.first() } selectedFilterGroup = group.children.indexOfFirst { it.id == checkedIds.first() }
showFeed() if (isCurrentTabSubChannels) showSubscriptions() else showFeed()
} }
channelGroupsModel.groups.observe(viewLifecycleOwner) { channelGroupsModel.groups.observe(viewLifecycleOwner) {
@ -279,8 +281,15 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() {
} }
} }
private fun List<StreamItem>.filterByStatusAndWatchPosition(): List<StreamItem> { @JvmName("filterSubsByGroup")
private fun List<Subscription>.filterByGroup(groupIndex: Int): List<Subscription> {
if (groupIndex == 0) return this
val group = channelGroupsModel.groups.value?.getOrNull(groupIndex - 1)
return filter { group?.channels?.contains(it.url.toID()) != false }
}
private fun List<StreamItem>.filterByStatusAndWatchPosition(): List<StreamItem> {
val streamItems = this.filter { val streamItems = this.filter {
val isVideo = !it.isShort && !it.isLive val isVideo = !it.isShort && !it.isLive
@ -350,7 +359,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun showSubscriptions() { private fun showSubscriptions() {
val subscriptions = viewModel.subscriptions.value ?: return val subscriptions = viewModel.subscriptions.value?.filterByGroup(selectedFilterGroup) ?: return
val legacySubscriptions = PreferenceHelper.getBoolean( val legacySubscriptions = PreferenceHelper.getBoolean(
PreferenceKeys.LEGACY_SUBSCRIPTIONS, PreferenceKeys.LEGACY_SUBSCRIPTIONS,