mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat: trigger refresh on home navigation in TvAppScreen for improved data consistency
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user