Follow "Play next episode automatically" from user playback settings (#245)

* Add getUserConfiguration and use it in episodeToPlayerItems

* Add a TODO to move user config to separate class
This commit is contained in:
Jarne Demeulemeester 2023-01-28 15:21:26 +01:00 committed by GitHub
parent 6e5e3f0788
commit 352a418d20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 4 deletions

View file

@ -10,6 +10,7 @@ import org.jellyfin.sdk.model.api.BaseItemKind
import org.jellyfin.sdk.model.api.ItemFields
import org.jellyfin.sdk.model.api.MediaSourceInfo
import org.jellyfin.sdk.model.api.SortOrder
import org.jellyfin.sdk.model.api.UserConfiguration
interface JellyfinRepository {
suspend fun getUserViews(): List<BaseItemDto>
@ -54,7 +55,8 @@ interface JellyfinRepository {
seriesId: UUID,
seasonId: UUID,
fields: List<ItemFields>? = null,
startItemId: UUID? = null
startItemId: UUID? = null,
limit: Int? = null,
): List<BaseItemDto>
suspend fun getMediaSources(itemId: UUID): List<MediaSourceInfo>
@ -84,4 +86,6 @@ interface JellyfinRepository {
fun getBaseUrl(): String
suspend fun updateDeviceName(name: String)
suspend fun getUserConfiguration(): UserConfiguration
}

View file

@ -26,6 +26,7 @@ import org.jellyfin.sdk.model.api.PlaybackInfoDto
import org.jellyfin.sdk.model.api.SortOrder
import org.jellyfin.sdk.model.api.SubtitleDeliveryMethod
import org.jellyfin.sdk.model.api.SubtitleProfile
import org.jellyfin.sdk.model.api.UserConfiguration
import timber.log.Timber
class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRepository {
@ -152,14 +153,16 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
seriesId: UUID,
seasonId: UUID,
fields: List<ItemFields>?,
startItemId: UUID?
startItemId: UUID?,
limit: Int?,
): List<BaseItemDto> = withContext(Dispatchers.IO) {
jellyfinApi.showsApi.getEpisodes(
seriesId,
jellyfinApi.userId!!,
seasonId = seasonId,
fields = fields,
startItemId = startItemId
startItemId = startItemId,
limit = limit,
).content.items.orEmpty()
}
@ -327,4 +330,8 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
}
}
}
override suspend fun getUserConfiguration(): UserConfiguration = withContext(Dispatchers.IO) {
jellyfinApi.userApi.getCurrentUser().content.configuration!!
}
}

View file

@ -155,12 +155,15 @@ class PlayerViewModel @Inject internal constructor(
playbackPosition: Long,
mediaSourceIndex: Int
): List<PlayerItem> {
// TODO Move user configuration to a separate class
val userConfig = repository.getUserConfiguration()
return repository
.getEpisodes(
seriesId = item.seriesId!!,
seasonId = item.seasonId!!,
fields = listOf(ItemFields.MEDIA_SOURCES),
startItemId = item.id
startItemId = item.id,
limit = if (userConfig.enableNextEpisodeAutoPlay) null else 1
)
.filter { it.mediaSources != null && it.mediaSources?.isNotEmpty() == true }
.filter { it.locationType != VIRTUAL }