refactor server startup into jobs
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"go.senan.xyz/gonic/server/ctrlbase"
|
||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||
"go.senan.xyz/gonic/server/jukebox"
|
||||
)
|
||||
|
||||
type CtxKey int
|
||||
@@ -24,14 +25,8 @@ const (
|
||||
|
||||
type Controller struct {
|
||||
*ctrlbase.Controller
|
||||
cachePath string
|
||||
}
|
||||
|
||||
func New(base *ctrlbase.Controller, cachePath string) *Controller {
|
||||
return &Controller{
|
||||
Controller: base,
|
||||
cachePath: cachePath,
|
||||
}
|
||||
CachePath string
|
||||
Jukebox *jukebox.Jukebox
|
||||
}
|
||||
|
||||
type metaResponse struct {
|
||||
|
||||
@@ -317,22 +317,23 @@ func (c *Controller) ServeGetRandomSongs(r *http.Request) *spec.Response {
|
||||
|
||||
func (c *Controller) ServeJukebox(r *http.Request) *spec.Response {
|
||||
params := r.Context().Value(CtxParams).(params.Params)
|
||||
switch params.Get("action") {
|
||||
case "set":
|
||||
getTracks := func() []*db.Track {
|
||||
var tracks []*db.Track
|
||||
ids := params.GetFirstListInt("id")
|
||||
if len(ids) == 0 {
|
||||
c.Jukebox.ClearTracks()
|
||||
}
|
||||
for _, id := range ids {
|
||||
track := &db.Track{}
|
||||
err := c.DB.Preload("Album").First(track, id).Error
|
||||
if err != nil {
|
||||
return spec.NewError(10, "couldn't find tracks with provided ids")
|
||||
c.DB.Preload("Album").First(track, id)
|
||||
if track.ID != 0 {
|
||||
tracks = append(tracks, track)
|
||||
}
|
||||
tracks = append(tracks, track)
|
||||
}
|
||||
c.Jukebox.SetTracks(tracks)
|
||||
return tracks
|
||||
}
|
||||
switch act := params.Get("action"); act {
|
||||
case "set":
|
||||
c.Jukebox.SetTracks(getTracks())
|
||||
case "add":
|
||||
c.Jukebox.AddTracks(getTracks())
|
||||
case "clear":
|
||||
c.Jukebox.ClearTracks()
|
||||
case "remove":
|
||||
@@ -356,8 +357,10 @@ func (c *Controller) ServeJukebox(r *http.Request) *spec.Response {
|
||||
sub := spec.NewResponse()
|
||||
sub.JukeboxPlaylist = c.Jukebox.GetTracks()
|
||||
return sub
|
||||
default:
|
||||
return spec.NewError(10, "unknown value `%s` for parameter 'action'", act)
|
||||
}
|
||||
// All actions except get are expected to return a status
|
||||
// all actions except get are expected to return a status
|
||||
sub := spec.NewResponse()
|
||||
sub.JukeboxStatus = c.Jukebox.Status()
|
||||
return sub
|
||||
|
||||
@@ -136,7 +136,7 @@ func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.R
|
||||
}
|
||||
servOpts.pref = pref
|
||||
servOpts.maxBitrate = params.GetIntOr("maxBitRate", 0)
|
||||
servOpts.cachePath = c.cachePath
|
||||
servOpts.cachePath = c.CachePath
|
||||
serveTrackEncode(w, r, servOpts)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user