refactor server startup into jobs

This commit is contained in:
sentriz
2020-04-18 19:32:51 +01:00
parent 64d0aee8dc
commit 1ff5845a02
15 changed files with 257 additions and 151 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -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
}