playback: fix parent restore

A single missed savedState access blew up parent restore silently, and
in some other cases with non-destructive queue restores would also not
restore the parent.
This commit is contained in:
Alexander Capehart 2024-06-12 20:32:32 -06:00
parent ba0d2cd879
commit 96d4a84f52
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
2 changed files with 23 additions and 19 deletions

View file

@ -367,17 +367,28 @@ class ExoPlaybackStateHolder(
rawQueue: RawQueue, rawQueue: RawQueue,
ack: StateAck.NewPlayback? ack: StateAck.NewPlayback?
) { ) {
this.parent = parent logD("Applying saved state")
player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) }) var sendEvent = false
if (rawQueue.isShuffled) { if (this.parent != parent) {
player.shuffleModeEnabled = true this.parent = parent
player.setShuffleOrder(BetterShuffleOrder(rawQueue.shuffledMapping.toIntArray())) sendEvent = true
} else { }
player.shuffleModeEnabled = false if (rawQueue != resolveQueue()) {
player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) })
if (rawQueue.isShuffled) {
player.shuffleModeEnabled = true
player.setShuffleOrder(BetterShuffleOrder(rawQueue.shuffledMapping.toIntArray()))
} else {
player.shuffleModeEnabled = false
}
player.seekTo(rawQueue.heapIndex, C.TIME_UNSET)
player.prepare()
player.pause()
sendEvent = true
}
if (sendEvent) {
ack?.let { playbackManager.ack(this, it) }
} }
player.seekTo(rawQueue.heapIndex, C.TIME_UNSET)
player.prepare()
ack?.let { playbackManager.ack(this, it) }
} }
override fun endSession() { override fun endSession() {

View file

@ -795,15 +795,8 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
index index
}) })
// Valid state where something needs to be played, direct the stateholder to apply stateHolder.applySavedState(savedState.parent, rawQueue, StateAck.NewPlayback)
// this new state. stateHolder.seekTo(savedState.positionMs)
val oldStateMirror = stateMirror
if (oldStateMirror.rawQueue != rawQueue) {
logD("Queue changed, must reload player")
stateHolder.playing(false)
stateHolder.applySavedState(parent, rawQueue, StateAck.NewPlayback)
stateHolder.seekTo(savedState.positionMs)
}
stateHolder.repeatMode(savedState.repeatMode) stateHolder.repeatMode(savedState.repeatMode)
isInitialized = true isInitialized = true