ctrlsubsonic: add genre parameter support to getRandomSongs

This commit is contained in:
Duncan Overbruck
2020-03-02 17:37:58 +01:00
parent 16d9d00408
commit 4d3c78a677

View File

@@ -288,18 +288,27 @@ func (c *Controller) ServeGetSong(r *http.Request) *spec.Response {
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.
q := c.DB.DB.Joins("JOIN albums ON tracks.album_id=albums.id").
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)
Order(gorm.Expr("random()"))
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.RandomTracks = &spec.RandomTracks{}
sub.RandomTracks.List = make([]*spec.TrackChild, len(tracks))