@@ -283,3 +283,26 @@ func (c *Controller) ServeGetSong(r *http.Request) *spec.Response {
|
|||||||
sub.Track = spec.NewTrackByTags(track, track.Album)
|
sub.Track = spec.NewTrackByTags(track, track.Album)
|
||||||
return sub
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ type Album struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type RandomTracks struct {
|
type RandomTracks struct {
|
||||||
Tracks []*TrackChild `xml:"song" json:"song"`
|
List []*TrackChild `xml:"song" json:"song"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TrackChild struct {
|
type TrackChild struct {
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ func setupSubsonic(router *mux.Router, ctrl *ctrlsubsonic.Controller) {
|
|||||||
rout.Handle("/savePlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeSavePlayQueue))
|
rout.Handle("/savePlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeSavePlayQueue))
|
||||||
rout.Handle("/getPlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetPlayQueue))
|
rout.Handle("/getPlayQueue{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetPlayQueue))
|
||||||
rout.Handle("/getSong{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetSong))
|
rout.Handle("/getSong{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetSong))
|
||||||
|
rout.Handle("/getRandomSongs{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetRandomSongs))
|
||||||
// ** begin raw
|
// ** begin raw
|
||||||
rout.Handle("/download{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeStream))
|
rout.Handle("/download{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeStream))
|
||||||
rout.Handle("/getCoverArt{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeGetCoverArt))
|
rout.Handle("/getCoverArt{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeGetCoverArt))
|
||||||
|
|||||||
Reference in New Issue
Block a user