diff --git a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt index 08238fa4..09b8de69 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt @@ -31,6 +31,7 @@ class JellyfinApi(context: Context, baseUrl: String) { val viewsApi = UserViewsApi(api) val itemsApi = ItemsApi(api) val userLibraryApi = UserLibraryApi(api) + val showsApi = TvShowsApi(api) companion object { @Volatile diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt index 3504ff1c..f95f65d3 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.navArgs import dev.jdtech.jellyfin.adapters.PersonListAdapter +import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel import dev.jdtech.jellyfin.databinding.FragmentMediaInfoBinding import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModelFactory @@ -45,6 +46,7 @@ class MediaInfoFragment : Fragment() { } }) + binding.seasonsRecyclerView.adapter = ViewItemListAdapter(ViewItemListAdapter.OnClickListener {}, fixedWidth = true) binding.peopleRecyclerView.adapter = PersonListAdapter() } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt index dd23c074..8de0481d 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt @@ -42,6 +42,9 @@ class MediaInfoViewModel(application: Application, itemId: UUID) : AndroidViewMo private val _dateString = MutableLiveData() val dateString: LiveData = _dateString + private val _seasons = MutableLiveData>() + val seasons: LiveData> = _seasons + init { viewModelScope.launch { _item.value = getItemDetails(itemId) @@ -53,6 +56,9 @@ class MediaInfoViewModel(application: Application, itemId: UUID) : AndroidViewMo _runTime.value = "${_item.value?.runTimeTicks?.div(600000000)} min" _dateString.value = getDateString(_item.value!!) _item.value!!.status?.let { Log.i("MediaInfoViewModel", it) } + if (_item.value!!.type == "Series") { + _seasons.value = getSeasons(itemId) + } } } @@ -64,6 +70,14 @@ class MediaInfoViewModel(application: Application, itemId: UUID) : AndroidViewMo return item } + private suspend fun getSeasons(itemId: UUID): List? { + val seasons: List? + withContext(Dispatchers.IO) { + seasons = jellyfinApi.showsApi.getSeasons(itemId, jellyfinApi.userId!!).content.items + } + return seasons + } + private suspend fun getActors(item: BaseItemDto): List? { val actors: List? withContext(Dispatchers.Default) { diff --git a/app/src/main/res/layout/fragment_media_info.xml b/app/src/main/res/layout/fragment_media_info.xml index 780492e4..3c96dc81 100644 --- a/app/src/main/res/layout/fragment_media_info.xml +++ b/app/src/main/res/layout/fragment_media_info.xml @@ -181,6 +181,36 @@ android:textAppearance="@style/TextAppearance.AppCompat.Body1" tools:text="An angel falls. A warrior rises. When Alita awakens with no memory of who she is in a future world she does not recognize, she is taken in by Ido, a compassionate doctor who realizes that somewhere in this abandoned cyborg shell is the heart and soul of a young woman with an extraordinary past." /> + + + + + + + + Director Writers + Seasons \ No newline at end of file