From a8d394efd78b6eb7458e428c6067de436c6586bf Mon Sep 17 00:00:00 2001 From: Alex X Date: Thu, 24 Oct 2024 20:44:37 +0300 Subject: [PATCH] Update PUT /api/streams for support multiple src params --- internal/homekit/api.go | 2 +- internal/streams/api.go | 32 ++++---------------------------- internal/streams/streams.go | 4 ++-- 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/internal/homekit/api.go b/internal/homekit/api.go index bd01259d..abd8e97c 100644 --- a/internal/homekit/api.go +++ b/internal/homekit/api.go @@ -101,7 +101,7 @@ func apiPair(id, url string) error { return err } - streams.New(id, []string{conn.URL()}) + streams.New(id, conn.URL()) return app.PatchConfig(id, conn.URL(), "streams") } diff --git a/internal/streams/api.go b/internal/streams/api.go index 7c635089..d6042974 100644 --- a/internal/streams/api.go +++ b/internal/streams/api.go @@ -1,7 +1,6 @@ package streams import ( - "encoding/json" "net/http" "github.com/AlexxIT/go2rtc/internal/api" @@ -9,18 +8,13 @@ import ( "github.com/AlexxIT/go2rtc/pkg/probe" ) -func returnAllStreams(w http.ResponseWriter) { - api.ResponseJSON(w, streams) -} - func apiStreams(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() src := query.Get("src") // without source - return all streams list - // PUT checks first body for sources - if src == "" && r.Method != "POST" && r.Method != "PUT" { - returnAllStreams(w) + if src == "" && r.Method != "POST" { + api.ResponseJSON(w, streams) return } @@ -53,31 +47,13 @@ func apiStreams(w http.ResponseWriter, r *http.Request) { if name == "" { name = src } - var sources []string - if src != "" { - sources = []string{src} - } else if r.Header.Get("Content-Type") == "application/json" { - var data struct { - Sources []string `json:"sources"` - } - if err := json.NewDecoder(r.Body).Decode(&data); err != nil { - log.Error().Err(err).Caller().Send() - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - sources = data.Sources - } else { - // without source(s) - return all streams list - returnAllStreams(w) - return - } - if New(name, sources) == nil { + if New(name, query["src"]...) == nil { http.Error(w, "", http.StatusBadRequest) return } - if err := app.PatchConfig(name, sources, "streams"); err != nil { + if err := app.PatchConfig(name, query["src"], "streams"); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } diff --git a/internal/streams/streams.go b/internal/streams/streams.go index 91c20f40..ae50e6c9 100644 --- a/internal/streams/streams.go +++ b/internal/streams/streams.go @@ -56,7 +56,7 @@ func Validate(source string) error { return nil } -func New(name string, sources []string) *Stream { +func New(name string, sources ...string) *Stream { for _, source := range sources { if Validate(source) != nil { return nil @@ -107,7 +107,7 @@ func Patch(name string, source string) *Stream { } // create new stream with this name - return New(name, []string{source}) + return New(name, source) } func GetOrPatch(query url.Values) *Stream {