ananas/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
Jarne Demeulemeester ad5e722d44
Introduce klint (#186)
* Add ktlint plugin

* Make code ktlint compliant

* Make code ktlint compliant
2022-10-29 21:17:48 +02:00

47 lines
1.6 KiB
Kotlin

package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.adapters.EpisodeItem
import dev.jdtech.jellyfin.repository.JellyfinRepository
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.jellyfin.sdk.model.api.ItemFields
@HiltViewModel
class SeasonViewModel
@Inject
constructor(
private val jellyfinRepository: JellyfinRepository
) : ViewModel() {
private val _uiState = MutableStateFlow<UiState>(UiState.Loading)
val uiState = _uiState.asStateFlow()
sealed class UiState {
data class Normal(val episodes: List<EpisodeItem>) : UiState()
object Loading : UiState()
data class Error(val error: Exception) : UiState()
}
fun loadEpisodes(seriesId: UUID, seasonId: UUID) {
viewModelScope.launch {
_uiState.emit(UiState.Loading)
try {
val episodes = getEpisodes(seriesId, seasonId)
_uiState.emit(UiState.Normal(episodes))
} catch (e: Exception) {
_uiState.emit(UiState.Error(e))
}
}
}
private suspend fun getEpisodes(seriesId: UUID, seasonId: UUID): List<EpisodeItem> {
val episodes =
jellyfinRepository.getEpisodes(seriesId, seasonId, fields = listOf(ItemFields.OVERVIEW))
return listOf(EpisodeItem.Header) + episodes.map { EpisodeItem.Episode(it) }
}
}