mirror of
https://github.com/bbara04/Purefin.git
synced 2026-03-31 17:10:08 +02:00
Fix playback progress updates on exit
This commit is contained in:
@@ -235,6 +235,16 @@ class PlayerManager @Inject constructor(
|
||||
_playbackState.update { it.copy(error = null) }
|
||||
}
|
||||
|
||||
fun snapshotProgress(): PlaybackProgressSnapshot {
|
||||
val duration = player.duration.takeIf { it > 0 } ?: _progress.value.durationMs
|
||||
return PlaybackProgressSnapshot(
|
||||
durationMs = duration,
|
||||
positionMs = player.currentPosition,
|
||||
bufferedMs = player.bufferedPosition,
|
||||
isLive = player.isCurrentMediaItemLive
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun applyTrackPreferences() {
|
||||
val context = currentMediaContext ?: return
|
||||
val preferences = trackPreferencesRepository.getMediaPreferences(context.preferenceKey).firstOrNull() ?: return
|
||||
@@ -307,15 +317,7 @@ class PlayerManager @Inject constructor(
|
||||
private fun startProgressLoop() {
|
||||
scope.launch {
|
||||
while (isActive) {
|
||||
val duration = player.duration.takeIf { it > 0 } ?: _progress.value.durationMs
|
||||
val position = player.currentPosition
|
||||
val buffered = player.bufferedPosition
|
||||
_progress.value = PlaybackProgressSnapshot(
|
||||
durationMs = duration,
|
||||
positionMs = position,
|
||||
bufferedMs = buffered,
|
||||
isLive = player.isCurrentMediaItemLive
|
||||
)
|
||||
_progress.value = snapshotProgress()
|
||||
delay(500)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,11 @@ class ProgressManager @Inject constructor(
|
||||
private var lastDurationMs: Long = 0L
|
||||
private var isPaused: Boolean = false
|
||||
|
||||
fun syncProgress(snapshot: PlaybackProgressSnapshot) {
|
||||
lastPositionMs = snapshot.positionMs
|
||||
lastDurationMs = snapshot.durationMs
|
||||
}
|
||||
|
||||
fun bind(
|
||||
playbackState: StateFlow<PlaybackStateSnapshot>,
|
||||
progress: StateFlow<PlaybackProgressSnapshot>,
|
||||
|
||||
@@ -251,6 +251,7 @@ class PlayerViewModel @Inject constructor(
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
autoHideJob?.cancel()
|
||||
progressManager.syncProgress(playerManager.snapshotProgress())
|
||||
progressManager.release()
|
||||
playerManager.release()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user