dev → main: Android UPnP/Sonos transport parity + server stream URL extension #79

Merged
bvandeusen merged 69 commits from dev into main 2026-06-04 08:15:15 -04:00
Showing only changes of commit cacb280832 - Show all commits
@@ -525,7 +525,11 @@ class PlayerController @Inject constructor(
val newPos = effectivePosition.coerceAtLeast(0)
val newDur = effectiveDuration(upnpActive, remoteState.durationMs, controller.duration)
val newBuf = controller.bufferedPosition.coerceAtLeast(0)
val trackChanged = desiredIdx != current.queueIndex && desiredIdx in queueRefs.indices
// Forward-only. If desiredIdx < queueIndex, the user just pressed Next
// and Sonos's poll hasn't caught up yet -- walking backward would undo
// their press (logcat 2026-06-04 showed exactly that jump-back-then-
// forward cycle). Mirrors maybeSyncLocalCursor's forward-only policy.
val trackChanged = desiredIdx > current.queueIndex && desiredIdx in queueRefs.indices
val somethingChanged = trackChanged ||
current.isPlaying != effectiveIsPlaying ||
current.positionMs != newPos ||