From 7b0941801774c5df4371cf5bd6d4f00d591f9027 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Wed, 28 Jan 2026 19:34:32 -0800 Subject: [PATCH] Fix #614: Update go-upnpcast for device discovery fix --- backend/playbackengine.go | 6 ------ backend/playbackmanager.go | 11 ++++++++++- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/backend/playbackengine.go b/backend/playbackengine.go index 1491c50..53d89f0 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -102,7 +102,6 @@ type playbackEngine struct { onPaused []func() onStopped []func() onPlaying []func() - onPlayerChange []func() onQueueChange []func() } @@ -171,10 +170,6 @@ func (p *playbackEngine) unregisterPlayerCallbacks(pl player.BasePlayer) { } func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { - // even if we don't successfully change players, - // make sure UI updates if needed (eg enabling cast button) - defer p.invokeNoArgCallbacks(p.onPlayerChange) - needToUnpause := false stat := p.CurrentPlayer().GetStatus() @@ -209,7 +204,6 @@ func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { p.playTrackAt(p.nowPlayingIdx, p.pendingPlayerChangeStatus.TimePos) p.pendingPlayerChange = false } - p.invokeNoArgCallbacks(p.onPlayerChange) vol := pl.GetVolume() if oldVol != vol { for _, cb := range p.onVolumeChange { diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index d320273..3757de6 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -37,6 +37,7 @@ type PlaybackManager struct { currentRemotePlayer *RemotePlaybackDevice onWaveformImgUpdate []func(*WaveformImage) + onPlayerChange []func() lastPlayTime float64 lastPlayingID string @@ -252,6 +253,14 @@ func (p *PlaybackManager) CurrentRemotePlayer() *RemotePlaybackDevice { } func (p *PlaybackManager) SetRemotePlayer(rp *RemotePlaybackDevice) error { + // Even in case of failure, call onPlayerChange callbacks to update UI + // (such as enabling/disabling cast button) + defer func() { + for _, cb := range p.onPlayerChange { + cb() + } + }() + p.cmdQueue.Clear() if rp == nil { if err := p.engine.SetPlayer(p.localPlayer); err != nil { @@ -278,7 +287,7 @@ func (p *PlaybackManager) CurrentPlayer() player.BasePlayer { } func (p *PlaybackManager) OnPlayerChange(cb func()) { - p.engine.onPlayerChange = append(p.engine.onPlayerChange, cb) + p.onPlayerChange = append(p.onPlayerChange, cb) } func (p *PlaybackManager) OnWaveformImgUpdate(cb func(*WaveformImage)) { diff --git a/go.mod b/go.mod index e7f0123..b4c83bf 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/supersonic-app/fyne-lyrics v0.0.0-20250614151306-b1880a70a410 github.com/supersonic-app/go-mpv v0.1.1-0.20250822102843-7a8cde5f5449 github.com/supersonic-app/go-subsonic v0.0.0-20260125165421-1efaa048a150 - github.com/supersonic-app/go-upnpcast v0.0.0-20251031171049-45a308877fe8 + github.com/supersonic-app/go-upnpcast v0.1.0 github.com/zalando/go-keyring v0.2.6 golang.org/x/net v0.49.0 golang.org/x/sys v0.40.0 diff --git a/go.sum b/go.sum index 543e69d..069e534 100644 --- a/go.sum +++ b/go.sum @@ -129,8 +129,8 @@ github.com/supersonic-app/go-mpv v0.1.1-0.20250822102843-7a8cde5f5449 h1:UHIPI43 github.com/supersonic-app/go-mpv v0.1.1-0.20250822102843-7a8cde5f5449/go.mod h1:1bQz6kBQumJopXEbkiqoLxIXLy7F7yWFBvknvpAtIC0= github.com/supersonic-app/go-subsonic v0.0.0-20260125165421-1efaa048a150 h1:Wh3EUdJI8bSr2nYtnkmG+bGNzEtGGSW3Rcg4eDM1a0M= github.com/supersonic-app/go-subsonic v0.0.0-20260125165421-1efaa048a150/go.mod h1:ClhAgC2qobwH19D6kdwULLYSHlOmldDGkdu2G2Z0Ijo= -github.com/supersonic-app/go-upnpcast v0.0.0-20251031171049-45a308877fe8 h1:OcFDKpjAwnMHAThS25h1D7sRzKfTVwBhMb+7F9Bsh3E= -github.com/supersonic-app/go-upnpcast v0.0.0-20251031171049-45a308877fe8/go.mod h1:2yVB6GhgemDgqOaF80MT15eZaS+l4sscZRn/ArGQ5Bo= +github.com/supersonic-app/go-upnpcast v0.1.0 h1:SL0WVgnqvAVaLT9MSRhSeVwF9pcUw1cgBITKVoWXN3g= +github.com/supersonic-app/go-upnpcast v0.1.0/go.mod h1:o/QGDTK3qdaS3h9Bt8aH5ywgbWbrPVzPCHlZYFs0IHY= github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/zalando/go-keyring v0.2.6 h1:r7Yc3+H+Ux0+M72zacZoItR3UDxeWfKTcabvkI8ua9s=