Handle empty mediaSources
This commit is contained in:
parent
2ff9239e8c
commit
d53fbf3369
6 changed files with 18 additions and 9 deletions
|
@ -37,7 +37,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
binding.playButton.setOnClickListener {
|
binding.playButton.setOnClickListener {
|
||||||
binding.playButton.setImageResource(android.R.color.transparent)
|
binding.playButton.setImageResource(android.R.color.transparent)
|
||||||
binding.progressCircular.visibility = View.VISIBLE
|
binding.progressCircular.visibility = View.VISIBLE
|
||||||
viewModel.preparePlayer()
|
viewModel.preparePlayerItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.checkButton.setOnClickListener {
|
binding.checkButton.setOnClickListener {
|
||||||
|
|
|
@ -190,7 +190,7 @@ class MediaInfoFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (args.itemType == "Series") {
|
} else if (args.itemType == "Series") {
|
||||||
viewModel.preparePlayer()
|
viewModel.preparePlayerItems()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ interface JellyfinRepository {
|
||||||
seriesId: UUID,
|
seriesId: UUID,
|
||||||
seasonId: UUID,
|
seasonId: UUID,
|
||||||
fields: List<ItemFields>? = null,
|
fields: List<ItemFields>? = null,
|
||||||
startIndex: Int? = null
|
startItemId: UUID? = null
|
||||||
): List<BaseItemDto>
|
): List<BaseItemDto>
|
||||||
|
|
||||||
suspend fun getMediaSources(itemId: UUID): List<MediaSourceInfo>
|
suspend fun getMediaSources(itemId: UUID): List<MediaSourceInfo>
|
||||||
|
|
|
@ -115,7 +115,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
|
||||||
seriesId: UUID,
|
seriesId: UUID,
|
||||||
seasonId: UUID,
|
seasonId: UUID,
|
||||||
fields: List<ItemFields>?,
|
fields: List<ItemFields>?,
|
||||||
startIndex: Int?
|
startItemId: UUID?
|
||||||
): List<BaseItemDto> {
|
): List<BaseItemDto> {
|
||||||
val episodes: List<BaseItemDto>
|
val episodes: List<BaseItemDto>
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
|
@ -124,7 +124,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
|
||||||
jellyfinApi.userId!!,
|
jellyfinApi.userId!!,
|
||||||
seasonId = seasonId,
|
seasonId = seasonId,
|
||||||
fields = fields,
|
fields = fields,
|
||||||
startIndex = startIndex
|
startItemId = startItemId
|
||||||
).content.items ?: listOf()
|
).content.items ?: listOf()
|
||||||
}
|
}
|
||||||
return episodes
|
return episodes
|
||||||
|
|
|
@ -61,7 +61,7 @@ constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun preparePlayer() {
|
fun preparePlayerItems() {
|
||||||
_playerItemsError.value = null
|
_playerItemsError.value = null
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
try {
|
try {
|
||||||
|
@ -77,12 +77,14 @@ constructor(
|
||||||
val episodes = jellyfinRepository.getEpisodes(
|
val episodes = jellyfinRepository.getEpisodes(
|
||||||
startEpisode.seriesId!!,
|
startEpisode.seriesId!!,
|
||||||
startEpisode.seasonId!!,
|
startEpisode.seasonId!!,
|
||||||
startIndex = startEpisode.indexNumber?.minus(1)
|
startItemId = startEpisode.id
|
||||||
)
|
)
|
||||||
for (episode in episodes) {
|
for (episode in episodes) {
|
||||||
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
||||||
|
if (mediaSources.isEmpty()) continue
|
||||||
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
||||||
}
|
}
|
||||||
|
if (playerItems.isEmpty()) throw Exception("No playable items found")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun markAsPlayed(itemId: UUID) {
|
fun markAsPlayed(itemId: UUID) {
|
||||||
|
|
|
@ -183,7 +183,7 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun preparePlayer() {
|
fun preparePlayerItems() {
|
||||||
_playerItemsError.value = null
|
_playerItemsError.value = null
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
try {
|
try {
|
||||||
|
@ -198,9 +198,14 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
|
||||||
private suspend fun createPlayerItems(series: BaseItemDto) {
|
private suspend fun createPlayerItems(series: BaseItemDto) {
|
||||||
if (nextUp.value != null) {
|
if (nextUp.value != null) {
|
||||||
val startEpisode = nextUp.value!!
|
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) {
|
for (episode in episodes) {
|
||||||
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
||||||
|
if (mediaSources.isEmpty()) continue
|
||||||
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -209,10 +214,12 @@ constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
|
||||||
val episodes = jellyfinRepository.getEpisodes(series.id, season.id)
|
val episodes = jellyfinRepository.getEpisodes(series.id, season.id)
|
||||||
for (episode in episodes) {
|
for (episode in episodes) {
|
||||||
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
val mediaSources = jellyfinRepository.getMediaSources(episode.id)
|
||||||
|
if (mediaSources.isEmpty()) continue
|
||||||
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
playerItems.add(PlayerItem(episode.id, mediaSources[0].id!!))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (playerItems.isEmpty()) throw Exception("No playable items found")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun navigateToPlayer(mediaSource: MediaSourceInfo) {
|
fun navigateToPlayer(mediaSource: MediaSourceInfo) {
|
||||||
|
|
Loading…
Reference in a new issue