feat: trigger refresh on home navigation in TvAppScreen for improved data consistency

This commit is contained in:
2026-05-08 20:26:26 +02:00
parent 0554f328c6
commit 60d2a1eb2a
3 changed files with 24 additions and 4 deletions

View File

@@ -20,6 +20,8 @@ import hu.bbara.purefin.core.player.model.TrackOption
import hu.bbara.purefin.core.player.model.TrackType
import hu.bbara.purefin.core.player.preference.TrackMatcher
import hu.bbara.purefin.core.player.preference.TrackPreferencesRepository
import hu.bbara.purefin.core.settings.SettingsOptions
import hu.bbara.purefin.core.settings.SettingsRepository
import hu.bbara.purefin.model.AudioTrackProperties
import hu.bbara.purefin.model.MediaSegment
import hu.bbara.purefin.model.PlayableMedia
@@ -54,7 +56,8 @@ class PlayerManager @Inject constructor(
private val playableMediaRepository: PlayableMediaRepository,
private val trackPreferencesRepository: TrackPreferencesRepository,
private val trackMatcher: TrackMatcher,
private val seriesIdLookUpUseCase: SeriesIdLookUpUseCase
private val seriesIdLookUpUseCase: SeriesIdLookUpUseCase,
private val settingsRepository: SettingsRepository
) {
companion object {
private const val SEEK_SETTLE_TOLERANCE_MS = 750L
@@ -62,7 +65,8 @@ class PlayerManager @Inject constructor(
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
private val mediaSegmentManager = MediaSegmentManager(player as ExoPlayer)
private val exoPlayer = player as ExoPlayer
private val mediaSegmentManager = MediaSegmentManager(exoPlayer)
private val _currentMediaId = MutableStateFlow<UUID?>(null)
private val _playlist = MutableStateFlow(emptyList<PlayableMedia>())
@@ -142,9 +146,18 @@ class PlayerManager @Inject constructor(
mediaSegmentManager.registerListener(mediaSegmentListener)
player.addListener(listener)
updateFromPlayer(player)
observeAutoPlayNextMedia()
startProgressLoop()
}
private fun observeAutoPlayNextMedia() {
scope.launch {
settingsRepository.value(SettingsOptions.autoPlayNextMedia).collect { autoPlayNextMedia ->
exoPlayer.pauseAtEndOfMediaItems = !autoPlayNextMedia
}
}
}
fun play(mediaId: UUID) {
scope.launch {
if (_playlist.value.map { it.id }.contains(mediaId)) {

View File

@@ -61,14 +61,14 @@ object VideoPlayerModule {
return ExoPlayer.Builder(application, renderersFactory)
.setMediaSourceFactory(mediaSourceFactory)
.setTrackSelector(trackSelector)
.setPauseAtEndOfMediaItems(true)
.setPauseAtEndOfMediaItems(false)
.setLoadControl(loadControl)
.setSeekParameters(SeekParameters.PREVIOUS_SYNC)
.setAudioAttributes(audioAttributes, true)
.build()
.apply {
playWhenReady = true
pauseAtEndOfMediaItems = true
pauseAtEndOfMediaItems = false
}
}
}

View File

@@ -57,6 +57,12 @@ object SettingsOptions {
defaultValue = true
)
val autoPlayNextMedia = BooleanSetting(
key = "auto_play_next_media",
title = "Autoplay next media",
defaultValue = true
)
val preferredAudioLanguage = StringSetting(
key = "preferred_audio_language",
title = "Preferred audio language",
@@ -81,6 +87,7 @@ object SettingsOptions {
options = listOf(
defaultPlaybackSpeed,
confirmMobileDataPlayback,
autoPlayNextMedia,
preferredAudioLanguage,
resetPlaybackSettings,
streamingQuality