package dev.jdtech.jellyfin.viewmodels import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData 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 kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.ItemFields import timber.log.Timber import java.util.* import javax.inject.Inject @HiltViewModel class SeasonViewModel @Inject constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() { private val _episodes = MutableLiveData>() val episodes: LiveData> = _episodes private val _finishedLoading = MutableLiveData() val finishedLoading: LiveData = _finishedLoading private val _error = MutableLiveData() val error: LiveData = _error fun loadEpisodes(seriesId: UUID, seasonId: UUID) { _error.value = false _finishedLoading.value = false viewModelScope.launch { try { _episodes.value = getEpisodes(seriesId, seasonId) } catch (e: Exception) { Timber.e(e) _error.value = true } _finishedLoading.value = true } } private suspend fun getEpisodes(seriesId: UUID, seasonId: UUID): List { val episodes = jellyfinRepository.getEpisodes(seriesId, seasonId, fields = listOf(ItemFields.OVERVIEW)) return listOf(EpisodeItem.Header) + episodes.map { EpisodeItem.Episode(it) } } }