45 lines
948 B
Go
45 lines
948 B
Go
package subsonic
|
|
|
|
import (
|
|
"encoding/json"
|
|
"encoding/xml"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
func sendJSON(w http.ResponseWriter, data any, status int) error {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(status)
|
|
return json.NewEncoder(w).Encode(data)
|
|
}
|
|
|
|
func sendXML(w http.ResponseWriter, data any, status int) error {
|
|
w.Header().Set("Content-Type", "application/xml")
|
|
w.WriteHeader(status)
|
|
return xml.NewEncoder(w).Encode(data)
|
|
}
|
|
|
|
func SendHTTPResponse(w http.ResponseWriter, r *http.Request, data any, status int) error {
|
|
format := r.URL.Query().Get("f")
|
|
if format == "" {
|
|
format = "json"
|
|
}
|
|
|
|
resp := struct {
|
|
SubsonicResponse any `xml:"subsonic-response" json:"subsonic-response"`
|
|
}{
|
|
SubsonicResponse: data,
|
|
}
|
|
|
|
switch format {
|
|
case "xml":
|
|
return sendXML(w, data, status)
|
|
case "json":
|
|
return sendJSON(w, resp, status)
|
|
case "jsonp":
|
|
return sendJSON(w, resp, status)
|
|
}
|
|
|
|
return fmt.Errorf("invalid format")
|
|
}
|