From b96a4192eb29ed4d76a2f000a0b8f8f1333b1372 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 6 Jul 2021 15:41:13 +0200 Subject: [PATCH] Add dependency injection to SeasonViewModel --- .../jellyfin/fragments/SeasonFragment.kt | 10 ++---- .../jellyfin/repository/JellyfinRepository.kt | 3 ++ .../repository/JellyfinRepositoryImpl.kt | 15 ++++++++ .../jellyfin/viewmodels/SeasonViewModel.kt | 35 ++++++------------- .../viewmodels/SeasonViewModelFactory.kt | 21 ----------- 5 files changed, 31 insertions(+), 53 deletions(-) delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModelFactory.kt diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt index 4a16375b..28e831f3 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt @@ -12,13 +12,13 @@ import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.adapters.EpisodeListAdapter import dev.jdtech.jellyfin.databinding.FragmentSeasonBinding import dev.jdtech.jellyfin.viewmodels.SeasonViewModel -import dev.jdtech.jellyfin.viewmodels.SeasonViewModelFactory import org.jellyfin.sdk.model.api.BaseItemDto @AndroidEntryPoint class SeasonFragment : Fragment() { private lateinit var binding: FragmentSeasonBinding + private val viewModel: SeasonViewModel by viewModels() private val args: SeasonFragmentArgs by navArgs() @@ -33,12 +33,6 @@ class SeasonFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val viewModelFactory = SeasonViewModelFactory( - requireNotNull(this.activity).application, - args.seriesId, - args.seasonId - ) - val viewModel: SeasonViewModel by viewModels { viewModelFactory } binding.viewModel = viewModel binding.episodesRecyclerView.adapter = EpisodeListAdapter(EpisodeListAdapter.OnClickListener { episode -> @@ -48,6 +42,8 @@ class SeasonFragment : Fragment() { binding.seasonName.text = args.seasonName binding.seriesId = args.seriesId binding.seasonId = args.seasonId + + viewModel.loadEpisodes(args.seriesId, args.seasonId) } private fun navigateToEpisodeBottomSheetFragment(episode: BaseItemDto) { diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt index 8bb2ffe3..84949023 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt @@ -1,6 +1,7 @@ package dev.jdtech.jellyfin.repository import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.ItemFields import java.util.* interface JellyfinRepository { @@ -11,4 +12,6 @@ interface JellyfinRepository { suspend fun getSeasons(seriesId: UUID): List suspend fun getNextUp(seriesId: UUID): List + + suspend fun getEpisodes(seriesId: UUID, seasonId: UUID, fields: List? = null): List } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index 854dd0a3..b751a0ef 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -4,6 +4,7 @@ import dev.jdtech.jellyfin.api.JellyfinApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.ItemFields import java.util.* class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRepository { @@ -45,4 +46,18 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep } return nextUpItems } + + override suspend fun getEpisodes( + seriesId: UUID, + seasonId: UUID, + fields: List? + ): List { + val episodes: List + withContext(Dispatchers.IO) { + episodes = jellyfinApi.showsApi.getEpisodes( + seriesId, jellyfinApi.userId!!, seasonId = seasonId, fields = fields + ).content.items ?: listOf() + } + return episodes + } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt index 1ba8ed7b..ebbc50c6 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt @@ -1,40 +1,25 @@ package dev.jdtech.jellyfin.viewmodels -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import dev.jdtech.jellyfin.api.JellyfinApi -import kotlinx.coroutines.Dispatchers +import androidx.lifecycle.* +import dagger.hilt.android.lifecycle.HiltViewModel +import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.ItemFields import java.util.* +import javax.inject.Inject -class SeasonViewModel(application: Application, seriesId: UUID, seasonId: UUID) : - AndroidViewModel(application) { - private val jellyfinApi = JellyfinApi.getInstance(application, "") +@HiltViewModel +class SeasonViewModel +@Inject +constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() { private val _episodes = MutableLiveData>() val episodes: LiveData> = _episodes - init { + fun loadEpisodes(seriesId: UUID, seasonId: UUID) { viewModelScope.launch { - _episodes.value = getEpisodes(seriesId, seasonId) + _episodes.value = jellyfinRepository.getEpisodes(seriesId, seasonId, fields = listOf(ItemFields.OVERVIEW)) } } - - private suspend fun getEpisodes(seriesId: UUID, seasonId: UUID): List? { - val episodes: List? - withContext(Dispatchers.IO) { - episodes = jellyfinApi.showsApi.getEpisodes( - seriesId, jellyfinApi.userId!!, seasonId = seasonId, fields = listOf( - ItemFields.OVERVIEW - ) - ).content.items - } - return episodes - } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModelFactory.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModelFactory.kt deleted file mode 100644 index 184174b0..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModelFactory.kt +++ /dev/null @@ -1,21 +0,0 @@ -package dev.jdtech.jellyfin.viewmodels - -import android.app.Application -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import java.lang.IllegalArgumentException -import java.util.* - -class SeasonViewModelFactory( - private val application: Application, - private val seriesId: UUID, - private val seasonId: UUID -) : ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(SeasonViewModel::class.java)) { - @Suppress("UNCHECKED_CAST") - return SeasonViewModel(application, seriesId, seasonId) as T - } - throw IllegalArgumentException("Unknown ViewModel class") - } -} \ No newline at end of file