breakup playlist update handler
This commit is contained in:
@@ -240,7 +240,7 @@ func (c *Controller) ServeUpdateLastFMAPIKey(r *http.Request) *Response {
|
|||||||
data.CurrentLastFMAPIKey = c.DB.GetSetting("lastfm_api_key")
|
data.CurrentLastFMAPIKey = c.DB.GetSetting("lastfm_api_key")
|
||||||
data.CurrentLastFMAPISecret = c.DB.GetSetting("lastfm_secret")
|
data.CurrentLastFMAPISecret = c.DB.GetSetting("lastfm_secret")
|
||||||
return &Response{
|
return &Response{
|
||||||
template: "update_lastfm_api_key",
|
template: "update_lastfm_api_key.tmpl",
|
||||||
data: data,
|
data: data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package ctrlsubsonic
|
package ctrlsubsonic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@@ -14,6 +15,7 @@ import (
|
|||||||
|
|
||||||
"senan.xyz/g/gonic/db"
|
"senan.xyz/g/gonic/db"
|
||||||
"senan.xyz/g/gonic/server/ctrlbase"
|
"senan.xyz/g/gonic/server/ctrlbase"
|
||||||
|
"senan.xyz/g/gonic/server/ctrlsubsonic/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -48,6 +50,9 @@ func runQueryCases(t *testing.T, h subsonicHandler, cases []*queryCase) {
|
|||||||
//
|
//
|
||||||
// request from the handler in question
|
// request from the handler in question
|
||||||
req, _ := http.NewRequest("", "?"+qc.params.Encode(), nil)
|
req, _ := http.NewRequest("", "?"+qc.params.Encode(), nil)
|
||||||
|
params := params.New(req)
|
||||||
|
withParams := context.WithValue(req.Context(), CtxParams, params)
|
||||||
|
req = req.WithContext(withParams)
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
testController.H(h).ServeHTTP(rr, req)
|
testController.H(h).ServeHTTP(rr, req)
|
||||||
body := rr.Body.String()
|
body := rr.Body.String()
|
||||||
|
|||||||
@@ -24,6 +24,55 @@ func lowerUDecOrHash(in string) string {
|
|||||||
return string(lower)
|
return string(lower)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type playlistOpValues struct {
|
||||||
|
c *Controller
|
||||||
|
r *http.Request
|
||||||
|
user *model.User
|
||||||
|
id int
|
||||||
|
}
|
||||||
|
|
||||||
|
func playlistDelete(opts playlistOpValues) {
|
||||||
|
indexes, ok := opts.r.URL.Query()["songIndexToRemove"]
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
trackIDs := []int{}
|
||||||
|
opts.c.DB.
|
||||||
|
Order("created_at").
|
||||||
|
Model(&model.PlaylistItem{}).
|
||||||
|
Where("playlist_id = ?", opts.id).
|
||||||
|
Pluck("track_id", &trackIDs)
|
||||||
|
for _, indexStr := range indexes {
|
||||||
|
i, err := strconv.Atoi(indexStr)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
opts.c.DB.Delete(&model.PlaylistItem{},
|
||||||
|
"track_id = ?", trackIDs[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func playlistAdd(opts playlistOpValues) {
|
||||||
|
var toAdd []string
|
||||||
|
for _, val := range []string{"songId", "songIdToAdd"} {
|
||||||
|
var ok bool
|
||||||
|
toAdd, ok = opts.r.URL.Query()[val]
|
||||||
|
if ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, trackIDStr := range toAdd {
|
||||||
|
trackID, err := strconv.Atoi(trackIDStr)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
opts.c.DB.Save(&model.PlaylistItem{
|
||||||
|
PlaylistID: opts.id,
|
||||||
|
TrackID: trackID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Controller) ServeGetLicence(r *http.Request) *spec.Response {
|
func (c *Controller) ServeGetLicence(r *http.Request) *spec.Response {
|
||||||
sub := spec.NewResponse()
|
sub := spec.NewResponse()
|
||||||
sub.Licence = &spec.Licence{
|
sub.Licence = &spec.Licence{
|
||||||
@@ -180,57 +229,19 @@ func (c *Controller) ServeUpdatePlaylist(r *http.Request) *spec.Response {
|
|||||||
playlistID = val
|
playlistID = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// begin updating meta
|
playlist := model.Playlist{ID: playlistID}
|
||||||
// playlist ID may still be 0 here, if so it's okay,
|
c.DB.Where(playlist).First(&playlist)
|
||||||
// we get a new playlist
|
|
||||||
playlist := &model.Playlist{}
|
|
||||||
c.DB.
|
|
||||||
Where("id = ?", playlistID).
|
|
||||||
First(playlist)
|
|
||||||
playlist.UserID = user.ID
|
playlist.UserID = user.ID
|
||||||
if val := params.Get("name"); val != "" {
|
if val := r.URL.Query().Get("name"); val != "" {
|
||||||
playlist.Name = val
|
playlist.Name = val
|
||||||
}
|
}
|
||||||
if val := params.Get("comment"); val != "" {
|
if val := r.URL.Query().Get("comment"); val != "" {
|
||||||
playlist.Comment = val
|
playlist.Comment = val
|
||||||
}
|
}
|
||||||
c.DB.Save(playlist)
|
c.DB.Save(&playlist)
|
||||||
// begin delete tracks
|
opts := playlistOpValues{c, r, user, playlist.ID}
|
||||||
indexes, ok := params.GetList("songIndexToRemove")
|
playlistDelete(opts)
|
||||||
if ok {
|
playlistAdd(opts)
|
||||||
trackIDs := []int{}
|
|
||||||
c.DB.
|
|
||||||
Order("created_at").
|
|
||||||
Model(&model.PlaylistItem{}).
|
|
||||||
Where("playlist_id = ?", playlistID).
|
|
||||||
Pluck("track_id", &trackIDs)
|
|
||||||
for _, indexStr := range indexes {
|
|
||||||
i, err := strconv.Atoi(indexStr)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c.DB.Delete(&model.PlaylistItem{},
|
|
||||||
"track_id = ?", trackIDs[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// begin add tracks
|
|
||||||
var toAdd []string
|
|
||||||
for _, val := range []string{"songId", "songIdToAdd"} {
|
|
||||||
toAdd, ok := params.GetList(val)
|
|
||||||
if ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, trackIDStr := range toAdd {
|
|
||||||
trackID, err := strconv.Atoi(trackIDStr)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c.DB.Save(&model.PlaylistItem{
|
|
||||||
PlaylistID: playlist.ID,
|
|
||||||
TrackID: trackID,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return spec.NewResponse()
|
return spec.NewResponse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user