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

View File

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

View File

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