diff --git a/core/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt b/core/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt index 487bbac1..d98cd71f 100644 --- a/core/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt +++ b/core/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt @@ -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(null) private val _playlist = MutableStateFlow(emptyList()) @@ -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)) { diff --git a/core/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt b/core/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt index b3052d24..dd9c2ea0 100644 --- a/core/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt +++ b/core/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt @@ -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 } } } diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingOption.kt b/core/src/main/java/hu/bbara/purefin/core/settings/SettingOption.kt index c1d8be59..9ee201c0 100644 --- a/core/src/main/java/hu/bbara/purefin/core/settings/SettingOption.kt +++ b/core/src/main/java/hu/bbara/purefin/core/settings/SettingOption.kt @@ -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