ctrlsubsonic: add genre parameter support to getRandomSongs
This commit is contained in:
@@ -288,18 +288,27 @@ func (c *Controller) ServeGetSong(r *http.Request) *spec.Response {
|
|||||||
|
|
||||||
func (c *Controller) ServeGetRandomSongs(r *http.Request) *spec.Response {
|
func (c *Controller) ServeGetRandomSongs(r *http.Request) *spec.Response {
|
||||||
params := r.Context().Value(CtxParams).(params.Params)
|
params := r.Context().Value(CtxParams).(params.Params)
|
||||||
// TODO: add genre restraint here
|
|
||||||
var tracks []*db.Track
|
var tracks []*db.Track
|
||||||
c.DB.DB.
|
|
||||||
|
q := c.DB.DB.Joins("JOIN albums ON tracks.album_id=albums.id").
|
||||||
Limit(params.GetIntOr("size", 10)).
|
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").
|
Preload("Album").
|
||||||
Order(gorm.Expr("random()")).
|
Order(gorm.Expr("random()"))
|
||||||
Find(&tracks)
|
|
||||||
|
if year, err := params.GetInt("fromYear"); err == nil {
|
||||||
|
q = q.Where("albums.tag_year >= ?", year)
|
||||||
|
}
|
||||||
|
if year, err := params.GetInt("toYear"); err == nil {
|
||||||
|
q = q.Where("albums.tag_year <= ?", year)
|
||||||
|
}
|
||||||
|
if genre := params.Get("genre"); genre != "" {
|
||||||
|
q = q.Joins(
|
||||||
|
"JOIN genres ON tracks.tag_genre_id=genres.id AND genres.name=?",
|
||||||
|
genre,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
q.Find(&tracks)
|
||||||
|
|
||||||
sub := spec.NewResponse()
|
sub := spec.NewResponse()
|
||||||
sub.RandomTracks = &spec.RandomTracks{}
|
sub.RandomTracks = &spec.RandomTracks{}
|
||||||
sub.RandomTracks.List = make([]*spec.TrackChild, len(tracks))
|
sub.RandomTracks.List = make([]*spec.TrackChild, len(tracks))
|
||||||
|
|||||||
Reference in New Issue
Block a user