diff --git a/core/playback/mpv/socket_name.go b/core/playback/mpv/socket_name.go new file mode 100644 index 00000000..a15dee8e --- /dev/null +++ b/core/playback/mpv/socket_name.go @@ -0,0 +1,9 @@ +//go:build !windows + +package mpv + +import "github.com/navidrome/navidrome/utils" + +func socketName(prefix, suffix string) string { + return utils.TempFileName(prefix, suffix) +} diff --git a/core/playback/mpv/socket_name_win.go b/core/playback/mpv/socket_name_win.go new file mode 100644 index 00000000..0611c060 --- /dev/null +++ b/core/playback/mpv/socket_name_win.go @@ -0,0 +1,15 @@ +//go:build windows + +package mpv + +import ( + "path/filepath" + + "github.com/google/uuid" +) + +func socketName(prefix, suffix string) string { + // Windows needs to use a named pipe for the socket + // see https://mpv.io/manual/master#using-mpv-from-other-programs-or-scripts + return filepath.Join(`\\.\pipe\mpvsocket`, prefix+uuid.NewString()+suffix) +} diff --git a/core/playback/mpv/track.go b/core/playback/mpv/track.go index e0578b40..12876a20 100644 --- a/core/playback/mpv/track.go +++ b/core/playback/mpv/track.go @@ -13,7 +13,6 @@ import ( "github.com/dexterlb/mpvipc" "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" - "github.com/navidrome/navidrome/utils" ) type MpvTrack struct { @@ -32,7 +31,7 @@ func NewTrack(playbackDoneChannel chan bool, deviceName string, mf model.MediaFi return nil, err } - tmpSocketName := utils.TempFileName("mpv-ctrl-", ".socket") + tmpSocketName := socketName("mpv-ctrl-", ".socket") args := createMPVCommand(mpvComdTemplate, deviceName, mf.Path, tmpSocketName) exe, err := start(args) @@ -103,35 +102,6 @@ func (t *MpvTrack) Pause() { } } -func (t *MpvTrack) Close() { - log.Debug("Closing resources", "track", t) - t.CloseCalled = true - // trying to shutdown mpv process using socket - if t.isSocketFilePresent() { - log.Debug("sending shutdown command") - _, err := t.Conn.Call("quit") - if err != nil { - log.Error("Error sending quit command to mpv-ipc socket", err) - - if t.Exe != nil { - log.Debug("cancelling executor") - err = t.Exe.Cancel() - if err != nil { - log.Error("Error canceling executor", err) - } - } - } - } - - if t.isSocketFilePresent() { - log.Debug("Removing socketfile", "socketfile", t.IPCSocketName) - err := os.Remove(t.IPCSocketName) - if err != nil { - log.Error("Error cleaning up socketfile", "socketfile", t.IPCSocketName, err) - } - } -} - func (t *MpvTrack) isSocketFilePresent() bool { if len(t.IPCSocketName) < 1 { return false diff --git a/core/playback/mpv/track_close.go b/core/playback/mpv/track_close.go new file mode 100644 index 00000000..2dee3b02 --- /dev/null +++ b/core/playback/mpv/track_close.go @@ -0,0 +1,38 @@ +//go:build !windows + +package mpv + +import ( + "os" + + "github.com/navidrome/navidrome/log" +) + +func (t *MpvTrack) Close() { + log.Debug("Closing resources", "track", t) + t.CloseCalled = true + // trying to shutdown mpv process using socket + if t.isSocketFilePresent() { + log.Debug("sending shutdown command") + _, err := t.Conn.Call("quit") + if err != nil { + log.Error("Error sending quit command to mpv-ipc socket", err) + + if t.Exe != nil { + log.Debug("cancelling executor") + err = t.Exe.Cancel() + if err != nil { + log.Error("Error canceling executor", err) + } + } + } + } + + if t.isSocketFilePresent() { + log.Debug("Removing socketfile", "socketfile", t.IPCSocketName) + err := os.Remove(t.IPCSocketName) + if err != nil { + log.Error("Error cleaning up socketfile", "socketfile", t.IPCSocketName, err) + } + } +} diff --git a/core/playback/mpv/track_close_win.go b/core/playback/mpv/track_close_win.go new file mode 100644 index 00000000..fd8fbd01 --- /dev/null +++ b/core/playback/mpv/track_close_win.go @@ -0,0 +1,8 @@ +//go:build windows + +package mpv + +func (t *MpvTrack) Close() { + // Windows automatically handles closing + // and cleaning up named pipe +} diff --git a/ui/src/personal/LastfmScrobbleToggle.js b/ui/src/personal/LastfmScrobbleToggle.js index ec0fddbb..c6499b63 100644 --- a/ui/src/personal/LastfmScrobbleToggle.js +++ b/ui/src/personal/LastfmScrobbleToggle.js @@ -23,7 +23,9 @@ const Progress = (props) => { ) const callbackUrl = `${window.location.origin}${callbackEndpoint}` openedTab.current = openInNewTab( - `https://www.last.fm/api/auth/?api_key=${localStorage.getItem('lastfm-apikey')}&cb=${callbackUrl}`, + `https://www.last.fm/api/auth/?api_key=${localStorage.getItem( + 'lastfm-apikey', + )}&cb=${callbackUrl}`, ) }, [])