diff --git a/engine/list_generator.go b/engine/list_generator.go index 5ca1d703e..fa88847d5 100644 --- a/engine/list_generator.go +++ b/engine/list_generator.go @@ -11,7 +11,6 @@ import ( type ListGenerator interface { GetAllStarred(ctx context.Context) (artists Entries, albums Entries, mediaFiles Entries, err error) GetNowPlaying(ctx context.Context) (Entries, error) - GetSongsByGenre(ctx context.Context, offset int, count int, genre string) (Entries, error) GetSongs(ctx context.Context, offset, size int, filter ListFilter) (Entries, error) GetAlbums(ctx context.Context, offset, size int, filter ListFilter) (Entries, error) } @@ -77,7 +76,14 @@ func ByYear(fromYear, toYear int) ListFilter { } } -func RandomSongs(genre string, fromYear, toYear int) ListFilter { +func SongsByGenre(genre string) ListFilter { + return ListFilter{ + Sort: "genre asc, title asc", + Filters: squirrel.Eq{"genre": genre}, + } +} + +func SongsByRandom(genre string, fromYear, toYear int) ListFilter { options := ListFilter{ Sort: "random()", } @@ -112,19 +118,6 @@ func (g *listGenerator) query(ctx context.Context, qo model.QueryOptions) (Entri return FromAlbums(albums), err } -func (g *listGenerator) GetSongsByGenre(ctx context.Context, offset int, count int, genre string) (Entries, error) { - options := model.QueryOptions{Offset: offset, Max: count} - if genre != "" { - options.Filters = squirrel.Eq{"genre": genre} - } - mediaFiles, err := g.ds.MediaFile(ctx).GetAll(options) - if err != nil { - return nil, err - } - - return FromMediaFiles(mediaFiles), nil -} - func (g *listGenerator) GetSongs(ctx context.Context, offset, size int, filter ListFilter) (Entries, error) { qo := model.QueryOptions(filter) qo.Offset = offset diff --git a/server/subsonic/album_lists.go b/server/subsonic/album_lists.go index df9482e53..6ae6e84ec 100644 --- a/server/subsonic/album_lists.go +++ b/server/subsonic/album_lists.go @@ -144,7 +144,7 @@ func (c *AlbumListController) GetRandomSongs(w http.ResponseWriter, r *http.Requ fromYear := utils.ParamInt(r, "fromYear", 0) toYear := utils.ParamInt(r, "toYear", 0) - songs, err := c.listGen.GetSongs(r.Context(), 0, size, engine.RandomSongs(genre, fromYear, toYear)) + songs, err := c.listGen.GetSongs(r.Context(), 0, size, engine.SongsByRandom(genre, fromYear, toYear)) if err != nil { log.Error(r, "Error retrieving random songs", "error", err) return nil, NewError(responses.ErrorGeneric, "Internal Error") @@ -161,7 +161,7 @@ func (c *AlbumListController) GetSongsByGenre(w http.ResponseWriter, r *http.Req offset := utils.MinInt(utils.ParamInt(r, "offset", 0), 500) genre := utils.ParamString(r, "genre") - songs, err := c.listGen.GetSongsByGenre(r.Context(), offset, count, genre) + songs, err := c.listGen.GetSongs(r.Context(), offset, count, engine.SongsByGenre(genre)) if err != nil { log.Error(r, "Error retrieving random songs", "error", err) return nil, NewError(responses.ErrorGeneric, "Internal Error")