47 lines
1.6 KiB
Kotlin
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) }
|
|
}
|
|
}
|