Skip to content

Commit

Permalink
add getRandomSongs
Browse files Browse the repository at this point in the history
closes #33
  • Loading branch information
sentriz committed Feb 21, 2020
1 parent 6de50dc commit e8b0ea6
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
23 changes: 23 additions & 0 deletions server/ctrlsubsonic/handlers_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,3 +283,26 @@ func (c *Controller) ServeGetSong(r *http.Request) *spec.Response {
sub.Track = spec.NewTrackByTags(track, track.Album)
return sub
}

func (c *Controller) ServeGetRandomSongs(r *http.Request) *spec.Response {
params := r.Context().Value(CtxParams).(params.Params)
// TODO: add genre restraint here
var tracks []*db.Track
c.DB.DB.
Limit(params.GetIntOr("size", 10)).
Where(
"albums.tag_year BETWEEN ? AND ?",
params.GetIntOr("fromYear", 1800),
params.GetIntOr("toYear", 2200)).
Joins("JOIN albums ON tracks.album_id=albums.id").
Preload("Album").
Order(gorm.Expr("random()")).
Find(&tracks)
sub := spec.NewResponse()
sub.RandomTracks = &spec.RandomTracks{}
sub.RandomTracks.List = make([]*spec.TrackChild, len(tracks))
for i, track := range tracks {
sub.RandomTracks.List[i] = spec.NewTrackByTags(track, track.Album)
}
return sub
}
2 changes: 1 addition & 1 deletion server/ctrlsubsonic/spec/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ type Album struct {
}

type RandomTracks struct {
Tracks []*TrackChild `xml:"song" json:"song"`
List []*TrackChild `xml:"song" json:"song"`
}

type TrackChild struct {
Expand Down
1 change: 1 addition & 0 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ func setupSubsonic(router *mux.Router, ctrl *ctrlsubsonic.Controller) {
rout.Handle("/savePlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeSavePlayQueue))
rout.Handle("/getPlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetPlayQueue))
rout.Handle("/getSong{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetSong))
rout.Handle("/getRandomSongs{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetRandomSongs))
// ** begin raw
rout.Handle("/download{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeStream))
rout.Handle("/getCoverArt{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeGetCoverArt))
Expand Down

0 comments on commit e8b0ea6

Please sign in to comment.