From e424bdd712eb3388ddb93f6874b70399844059c0 Mon Sep 17 00:00:00 2001 From: devgianlu Date: Thu, 21 May 2026 15:53:22 +0200 Subject: [PATCH] feat: add stop API call --- api-spec.yml | 6 ++++++ daemon/api_server.go | 9 +++++++++ daemon/player.go | 3 +++ 3 files changed, 18 insertions(+) diff --git a/api-spec.yml b/api-spec.yml index 0e524308..dbee7809 100644 --- a/api-spec.yml +++ b/api-spec.yml @@ -129,6 +129,12 @@ paths: responses: 200: description: Successful response + /player/stop: + post: + description: Stop playback and disconnect session + responses: + 200: + description: Successful response /player/playpause: post: description: Resume playback when paused, or pause playback when playing diff --git a/daemon/api_server.go b/daemon/api_server.go index 017268a1..6576a9a8 100644 --- a/daemon/api_server.go +++ b/daemon/api_server.go @@ -66,6 +66,7 @@ const ( ApiRequestTypePrev ApiRequestType = "prev" ApiRequestTypeNext ApiRequestType = "next" ApiRequestTypePlay ApiRequestType = "play" + ApiRequestTypeStop ApiRequestType = "stop" ApiRequestTypeGetVolume ApiRequestType = "get_volume" ApiRequestTypeSetVolume ApiRequestType = "set_volume" ApiRequestTypeSetRepeatingContext ApiRequestType = "repeating_context" @@ -494,6 +495,14 @@ func (s *ConcreteApiServer) serve() { s.handleRequest(ApiRequest{Type: ApiRequestTypePause}, w) }) + m.HandleFunc("/player/stop", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + s.handleRequest(ApiRequest{Type: ApiRequestTypeStop}, w) + }) m.HandleFunc("/player/playpause", func(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { w.WriteHeader(http.StatusMethodNotAllowed) diff --git a/daemon/player.go b/daemon/player.go index 526691bb..1b228541 100644 --- a/daemon/player.go +++ b/daemon/player.go @@ -479,6 +479,9 @@ func (p *AppPlayer) handleApiRequest(ctx context.Context, req ApiRequest) (any, case ApiRequestTypePause: _ = p.pause(ctx) return nil, nil + case ApiRequestTypeStop: + _ = p.stopPlayback(ctx) + return nil, nil case ApiRequestTypePlayPause: if p.state.player.IsPaused { _ = p.play(ctx)