v2026.06.03 hotfix — Sonos cast URL + UPnP picker polish #78

Merged
bvandeusen merged 4 commits from dev into main 2026-06-03 15:30:09 -04:00
Showing only changes of commit 96f12d6aac - Show all commits
@@ -178,13 +178,28 @@ class OutputPickerController @Inject constructor(
* deserialize / SOAP-parse code paths).
*/
private suspend fun selectUpnp(route: OutputRoute) {
val trackId = playerController.uiState.value.currentTrack?.id ?: return
val transport = upnpDiscovery.transportFor(route.id) ?: return
val trackId = playerController.uiState.value.currentTrack?.id
if (trackId == null) {
Timber.w("UPnP select skipped: no currentTrack (start playback first)")
return
}
val transport = upnpDiscovery.transportFor(route.id)
if (transport == null) {
Timber.w(
"UPnP select skipped: no transport for route id=${route.id} " +
"(route disappeared or id mismatch with discovery list)",
)
return
}
runCatching {
Timber.i("UPnP select: mint token for track=$trackId, route=${route.name}")
val token = castApi.streamToken(StreamTokenRequest(trackId = trackId))
Timber.i("UPnP select: SetAVTransportURI to ${token.url}")
transport.setAVTransportURI(token.url)
Timber.i("UPnP select: Play")
transport.play()
playerController.pause()
Timber.i("UPnP select: done")
}.onFailure { e ->
Timber.w(e, "UPnP select failed for route ${route.id}")
}