diff --git a/server/ctrlsubsonic/handlers_common.go b/server/ctrlsubsonic/handlers_common.go index 0becca3..b795bbb 100644 --- a/server/ctrlsubsonic/handlers_common.go +++ b/server/ctrlsubsonic/handlers_common.go @@ -10,6 +10,7 @@ import ( "go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/spec" + "go.senan.xyz/gonic/server/ctrlsubsonic/specid" "go.senan.xyz/gonic/server/db" "go.senan.xyz/gonic/server/lastfm" "go.senan.xyz/gonic/server/scanner" @@ -135,7 +136,7 @@ func (c *Controller) ServeGetPlayQueue(r *http.Request) *spec.Response { sub.PlayQueue = &spec.PlayQueue{} sub.PlayQueue.Username = user.Name sub.PlayQueue.Position = queue.Position - sub.PlayQueue.Current = queue.Current + sub.PlayQueue.Current = queue.CurrentSID() sub.PlayQueue.Changed = queue.UpdatedAt sub.PlayQueue.ChangedBy = queue.ChangedBy trackIDs := queue.GetItems() @@ -164,7 +165,7 @@ func (c *Controller) ServeSavePlayQueue(r *http.Request) *spec.Response { user := r.Context().Value(CtxUser).(*db.User) queue := &db.PlayQueue{UserID: user.ID} c.DB.Where(queue).First(queue) - queue.Current = params.GetOrInt("current", 0) + queue.Current = params.GetOrID("current", specid.ID{}).Value queue.Position = params.GetOrInt("position", 0) queue.ChangedBy = params.GetOr("c", "") // must exist, middleware checks queue.SetItems(trackIDs) diff --git a/server/ctrlsubsonic/spec/spec.go b/server/ctrlsubsonic/spec/spec.go index 10eb1af..1994a06 100644 --- a/server/ctrlsubsonic/spec/spec.go +++ b/server/ctrlsubsonic/spec/spec.go @@ -265,7 +265,7 @@ type Genre struct { } type PlayQueue struct { - Current int `xml:"current,attr,omitempty" json:"current,omitempty"` + Current *specid.ID `xml:"current,attr,omitempty" json:"current,omitempty"` Position int `xml:"position,attr,omitempty" json:"position,omitempty"` Username string `xml:"username,attr" json:"username"` Changed time.Time `xml:"changed,attr" json:"changed"` diff --git a/server/db/model.go b/server/db/model.go index 7dfab99..ad0ff20 100644 --- a/server/db/model.go +++ b/server/db/model.go @@ -224,6 +224,10 @@ type PlayQueue struct { Items string } +func (p *PlayQueue) CurrentSID() *specid.ID { + return &specid.ID{Type: specid.Track, Value: p.Current} +} + func (p *PlayQueue) GetItems() []int { return splitInt(p.Items, ",") }