Handle empty mediaSources

This commit is contained in:
jarnedemeulemeester 2021-08-25 11:00:58 +02:00
parent 2ff9239e8c
commit d53fbf3369
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
6 changed files with 18 additions and 9 deletions

View file

@ -37,7 +37,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.playButton.setOnClickListener {
binding.playButton.setImageResource(android.R.color.transparent)
binding.progressCircular.visibility = View.VISIBLE
viewModel.preparePlayer()
viewModel.preparePlayerItems()
}
binding.checkButton.setOnClickListener {

View file

@ -190,7 +190,7 @@ class MediaInfoFragment : Fragment() {
}
}
} else if (args.itemType == "Series") {
viewModel.preparePlayer()
viewModel.preparePlayerItems()
}
}

View file

@ -32,7 +32,7 @@ interface JellyfinRepository {
seriesId: UUID,
seasonId: UUID,
fields: List<ItemFields>? = null,
startIndex: Int? = null
startItemId: UUID? = null
): List<BaseItemDto>
suspend fun getMediaSources(itemId: UUID): List<MediaSourceInfo>

View file

@ -115,7 +115,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
seriesId: UUID,
seasonId: UUID,
fields: List<ItemFields>?,
startIndex: Int?
startItemId: UUID?
): List<BaseItemDto> {
val episodes: List<BaseItemDto>
withContext(Dispatchers.IO) {
@ -124,7 +124,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
jellyfinApi.userId!!,
seasonId = seasonId,
fields = fields,
startIndex = startIndex
startItemId = startItemId
).content.items ?: listOf()
}
return episodes

View file

@ -61,7 +61,7 @@ constructor(
}
}
fun preparePlayer() {
fun preparePlayerItems() {
_playerItemsError.value = null
viewModelScope.launch {
try {
@ -77,12 +77,14 @@ constructor(
val episodes = jellyfinRepository.getEpisodes(
startEpisode.seriesId!!,
startEpisode.seasonId!!,
startIndex = startEpisode.indexNumber?.minus(1)
startItemId = startEpisode.id
)
for (episode in episodes) {
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
if (mediaSources.isEmpty()) continue
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
}
if (playerItems.isEmpty()) throw Exception("No playable items found")
}
fun markAsPlayed(itemId: UUID) {

View file

@ -183,7 +183,7 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
}
}
fun preparePlayer() {
fun preparePlayerItems() {
_playerItemsError.value = null
viewModelScope.launch {
try {
@ -198,9 +198,14 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
private suspend fun createPlayerItems(series: BaseItemDto) {
if (nextUp.value != null) {
val startEpisode = nextUp.value!!
val episodes = jellyfinRepository.getEpisodes(startEpisode.seriesId!!, startEpisode.seasonId!!, startIndex = startEpisode.indexNumber?.minus(1))
val episodes = jellyfinRepository.getEpisodes(
startEpisode.seriesId!!,
startEpisode.seasonId!!,
startItemId = startEpisode.id
)
for (episode in episodes) {
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
if (mediaSources.isEmpty()) continue
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
}
} else {
@ -209,10 +214,12 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
val episodes = jellyfinRepository.getEpisodes(series.id, season.id)
for (episode in episodes) {
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
if (mediaSources.isEmpty()) continue
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
}
}
}
if (playerItems.isEmpty()) throw Exception("No playable items found")
}
fun navigateToPlayer(mediaSource: MediaSourceInfo) {