mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-24 03:36:51 +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.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)) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user