Files
vibesonic/internal/subsonic/radio.go
T

92 lines
2.6 KiB
Go

package subsonic
import "git.noroutes.net/NoRoutes/vibetunes/internal/database"
func init() {
register("getInternetRadioStations", handleGetInternetRadioStations)
register("createInternetRadioStation", handleCreateInternetRadioStation)
register("updateInternetRadioStation", handleUpdateInternetRadioStation)
register("deleteInternetRadioStation", handleDeleteInternetRadioStation)
}
func handleGetInternetRadioStations(rc *Context) *apiError {
stations, err := database.ListRadioStations(rc.Server.DB)
if err != nil {
return newError(ErrGeneric, err.Error())
}
out := &InternetRadioStations{}
for _, s := range stations {
out.InternetRadioStation = append(out.InternetRadioStation, InternetRadioStation{
ID: s.ID, Name: s.Name, StreamURL: s.StreamURL, HomepageURL: s.HomepageURL,
})
}
rc.Response = newResponse()
rc.Response.InternetRadioStations = out
return nil
}
func handleCreateInternetRadioStation(rc *Context) *apiError {
if !rc.User.IsAdmin {
return errUnauthorized("managing internet radio stations")
}
streamURL, aerr := rc.Params.Required("streamUrl")
if aerr != nil {
return aerr
}
name, aerr := rc.Params.Required("name")
if aerr != nil {
return aerr
}
homepage := rc.Params.Get("homepageUrl")
if _, err := database.CreateRadioStation(rc.Server.DB, name, streamURL, homepage); err != nil {
return newError(ErrGeneric, err.Error())
}
rc.Response = newResponse()
return nil
}
func handleUpdateInternetRadioStation(rc *Context) *apiError {
if !rc.User.IsAdmin {
return errUnauthorized("managing internet radio stations")
}
id, aerr := rc.Params.Required("id")
if aerr != nil {
return aerr
}
streamURL, aerr := rc.Params.Required("streamUrl")
if aerr != nil {
return aerr
}
name, aerr := rc.Params.Required("name")
if aerr != nil {
return aerr
}
homepage := rc.Params.Get("homepageUrl")
if _, err := database.GetRadioStation(rc.Server.DB, id); err != nil {
return errNotFound("Internet radio station")
}
if err := database.UpdateRadioStation(rc.Server.DB, id, name, streamURL, homepage); err != nil {
return newError(ErrGeneric, err.Error())
}
rc.Response = newResponse()
return nil
}
func handleDeleteInternetRadioStation(rc *Context) *apiError {
if !rc.User.IsAdmin {
return errUnauthorized("managing internet radio stations")
}
id, aerr := rc.Params.Required("id")
if aerr != nil {
return aerr
}
if _, err := database.GetRadioStation(rc.Server.DB, id); err != nil {
return errNotFound("Internet radio station")
}
if err := database.DeleteRadioStation(rc.Server.DB, id); err != nil {
return newError(ErrGeneric, err.Error())
}
rc.Response = newResponse()
return nil
}