From ee61738d690fdce9d9ab3261b6f8664645e7bfeb Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Wed, 30 Jun 2021 15:36:47 +0200 Subject: [PATCH] Add Continue Watching section to HomeFragment --- .../jellyfin/adapters/ViewListAdapter.kt | 15 +++++----- .../models/{NextUp.kt => HomeSection.kt} | 2 +- .../jellyfin/viewmodels/HomeViewModel.kt | 30 +++++++++++++++---- app/src/main/res/layout/next_up_section.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 34 insertions(+), 16 deletions(-) rename app/src/main/java/dev/jdtech/jellyfin/models/{NextUp.kt => HomeSection.kt} (88%) diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt index aa2ecb46..009611d9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt @@ -7,9 +7,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import dev.jdtech.jellyfin.databinding.NextUpSectionBinding import dev.jdtech.jellyfin.databinding.ViewItemBinding -import dev.jdtech.jellyfin.models.NextUp +import dev.jdtech.jellyfin.models.HomeSection import dev.jdtech.jellyfin.models.View -import org.jellyfin.sdk.model.api.BaseItemDto import java.lang.ClassCastException import java.util.* @@ -42,8 +41,8 @@ class ViewListAdapter( class NextUpViewHolder(private var binding: NextUpSectionBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(section: HomeItem.NextUpSection) { - binding.section = section.nextUp + fun bind(section: HomeItem.Section) { + binding.section = section.homeSection binding.itemsRecyclerView.adapter = HomeEpisodeListAdapter() binding.executePendingBindings() } @@ -82,7 +81,7 @@ class ViewListAdapter( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder.itemViewType) { ITEM_VIEW_TYPE_NEXT_UP -> { - val view = getItem(position) as HomeItem.NextUpSection + val view = getItem(position) as HomeItem.Section (holder as NextUpViewHolder).bind(view) } ITEM_VIEW_TYPE_VIEW -> { @@ -94,7 +93,7 @@ class ViewListAdapter( override fun getItemViewType(position: Int): Int { return when (getItem(position)) { - is HomeItem.NextUpSection -> ITEM_VIEW_TYPE_NEXT_UP + is HomeItem.Section -> ITEM_VIEW_TYPE_NEXT_UP is HomeItem.ViewItem -> ITEM_VIEW_TYPE_VIEW } } @@ -105,8 +104,8 @@ class ViewListAdapter( } sealed class HomeItem { - data class NextUpSection(val nextUp: NextUp) : HomeItem() { - override val id = nextUp.id + data class Section(val homeSection: HomeSection) : HomeItem() { + override val id = homeSection.id } data class ViewItem(val view: View) : HomeItem() { diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/NextUp.kt b/app/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt similarity index 88% rename from app/src/main/java/dev/jdtech/jellyfin/models/NextUp.kt rename to app/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt index e836bd20..dc1d1998 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/models/NextUp.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt @@ -3,7 +3,7 @@ package dev.jdtech.jellyfin.models import org.jellyfin.sdk.model.api.BaseItemDto import java.util.* -data class NextUp( +data class HomeSection( val id: UUID, val name: String?, var items: List? = null diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt index eaa037a2..ec90c707 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.* import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.adapters.HomeItem import dev.jdtech.jellyfin.api.JellyfinApi -import dev.jdtech.jellyfin.models.NextUp +import dev.jdtech.jellyfin.models.HomeSection import dev.jdtech.jellyfin.models.View import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -19,6 +19,7 @@ class HomeViewModel( ) : AndroidViewModel(application) { private val jellyfinApi = JellyfinApi.getInstance(application, "") + private val continueWatchingString = application.resources.getString(R.string.continue_watching) private val nextUpString = application.resources.getString(R.string.next_up) private val _views = MutableLiveData>() @@ -52,14 +53,24 @@ class HomeViewModel( views.add(v) } - val nextUpItems = getNextUp() - val nextUp = NextUp(UUID.randomUUID(), nextUpString, nextUpItems) + val items = mutableListOf() - _views.value = when (nextUpItems) { - null -> views.map { HomeItem.ViewItem(it) } - else -> listOf(HomeItem.NextUpSection(nextUp)) + views.map { HomeItem.ViewItem(it) } + val resumeItems = getResumeItems() + val resumeSection = HomeSection(UUID.randomUUID(), continueWatchingString, resumeItems) + + if (!resumeItems.isNullOrEmpty()) { + items.add(HomeItem.Section(resumeSection)) } + val nextUpItems = getNextUp() + val nextUpSection = HomeSection(UUID.randomUUID(), nextUpString, nextUpItems) + + if (!nextUpItems.isNullOrEmpty()) { + items.add(HomeItem.Section(nextUpSection)) + } + + _views.value = items + views.map { HomeItem.ViewItem(it) } + _finishedLoading.value = true } catch (e: Exception) { _finishedLoading.value = true @@ -92,6 +103,13 @@ class HomeViewModel( return items } + private suspend fun getResumeItems(): List? { + val items: List? + withContext(Dispatchers.IO) { + items = jellyfinApi.itemsApi.getResumeItems(jellyfinApi.userId!!).content.items + } + return items + } } private fun BaseItemDto.toView(): View { diff --git a/app/src/main/res/layout/next_up_section.xml b/app/src/main/res/layout/next_up_section.xml index e4adb614..2af28362 100644 --- a/app/src/main/res/layout/next_up_section.xml +++ b/app/src/main/res/layout/next_up_section.xml @@ -7,7 +7,7 @@ + type="dev.jdtech.jellyfin.models.HomeSection" /> %1$d. %2$s S%1$d:E%2$d - %3$s Next Up + Continue Watching Latest %1$s \ No newline at end of file