From 9aeaaa6610c1efd70f122e41c18f38ac71e66c92 Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 19 Apr 2024 12:38:02 -0400 Subject: [PATCH] Fix issue in https://github.com/navidrome/navidrome/issues/2767#issuecomment-2065636352 --- core/playback/mpv/socket_name.go | 9 ----- core/playback/mpv/sockets.go | 22 +++++++++++ .../{socket_name_win.go => sockets_win.go} | 4 ++ core/playback/mpv/track.go | 25 ++++++++++++ core/playback/mpv/track_close.go | 38 ------------------- core/playback/mpv/track_close_win.go | 8 ---- 6 files changed, 51 insertions(+), 55 deletions(-) delete mode 100644 core/playback/mpv/socket_name.go create mode 100644 core/playback/mpv/sockets.go rename core/playback/mpv/{socket_name_win.go => sockets_win.go} (79%) delete mode 100644 core/playback/mpv/track_close.go delete mode 100644 core/playback/mpv/track_close_win.go diff --git a/core/playback/mpv/socket_name.go b/core/playback/mpv/socket_name.go deleted file mode 100644 index a15dee8ee..000000000 --- a/core/playback/mpv/socket_name.go +++ /dev/null @@ -1,9 +0,0 @@ -//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/sockets.go b/core/playback/mpv/sockets.go new file mode 100644 index 000000000..5c91d94fc --- /dev/null +++ b/core/playback/mpv/sockets.go @@ -0,0 +1,22 @@ +//go:build !windows + +package mpv + +import ( + "os" + + "github.com/navidrome/navidrome/log" + "github.com/navidrome/navidrome/utils" +) + +func socketName(prefix, suffix string) string { + return utils.TempFileName(prefix, suffix) +} + +func removeSocket(socketName string) { + log.Debug("Removing socketfile", "socketfile", socketName) + err := os.Remove(socketName) + if err != nil { + log.Error("Error cleaning up socketfile", "socketfile", socketName, err) + } +} diff --git a/core/playback/mpv/socket_name_win.go b/core/playback/mpv/sockets_win.go similarity index 79% rename from core/playback/mpv/socket_name_win.go rename to core/playback/mpv/sockets_win.go index 0611c0602..a71d14846 100644 --- a/core/playback/mpv/socket_name_win.go +++ b/core/playback/mpv/sockets_win.go @@ -13,3 +13,7 @@ func socketName(prefix, suffix string) string { // see https://mpv.io/manual/master#using-mpv-from-other-programs-or-scripts return filepath.Join(`\\.\pipe\mpvsocket`, prefix+uuid.NewString()+suffix) } + +func removeSocket(string) { + // Windows automatically handles cleaning up named pipe +} diff --git a/core/playback/mpv/track.go b/core/playback/mpv/track.go index 3d4dfcd74..3767be958 100644 --- a/core/playback/mpv/track.go +++ b/core/playback/mpv/track.go @@ -102,6 +102,31 @@ 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() { + removeSocket(t.IPCSocketName) + } +} + 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 deleted file mode 100644 index 2dee3b02d..000000000 --- a/core/playback/mpv/track_close.go +++ /dev/null @@ -1,38 +0,0 @@ -//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 deleted file mode 100644 index fd8fbd01f..000000000 --- a/core/playback/mpv/track_close_win.go +++ /dev/null @@ -1,8 +0,0 @@ -//go:build windows - -package mpv - -func (t *MpvTrack) Close() { - // Windows automatically handles closing - // and cleaning up named pipe -}