diff --git a/api/album_list.go b/api/album_list.go index 3f761aac..673e2ea8 100644 --- a/api/album_list.go +++ b/api/album_list.go @@ -1,11 +1,8 @@ package api import ( - "time" - "github.com/astaxie/beego" "github.com/deluan/gosonic/api/responses" - "github.com/deluan/gosonic/domain" "github.com/deluan/gosonic/engine" "github.com/deluan/gosonic/utils" ) @@ -16,17 +13,17 @@ type AlbumListController struct { types map[string]strategy } -type strategy func(offset int, size int) (domain.Albums, error) +type strategy func(offset int, size int) (engine.Entries, error) func (c *AlbumListController) Prepare() { utils.ResolveDependencies(&c.listGen) c.types = map[string]strategy{ - "random": func(o int, s int) (domain.Albums, error) { return c.listGen.GetRandom(o, s) }, - "newest": func(o int, s int) (domain.Albums, error) { return c.listGen.GetNewest(o, s) }, - "recent": func(o int, s int) (domain.Albums, error) { return c.listGen.GetRecent(o, s) }, - "frequent": func(o int, s int) (domain.Albums, error) { return c.listGen.GetFrequent(o, s) }, - "highest": func(o int, s int) (domain.Albums, error) { return c.listGen.GetHighest(o, s) }, + "random": func(o int, s int) (engine.Entries, error) { return c.listGen.GetRandom(o, s) }, + "newest": func(o int, s int) (engine.Entries, error) { return c.listGen.GetNewest(o, s) }, + "recent": func(o int, s int) (engine.Entries, error) { return c.listGen.GetRecent(o, s) }, + "frequent": func(o int, s int) (engine.Entries, error) { return c.listGen.GetFrequent(o, s) }, + "highest": func(o int, s int) (engine.Entries, error) { return c.listGen.GetHighest(o, s) }, } } @@ -49,21 +46,8 @@ func (c *AlbumListController) GetAlbumList() { } albumList := make([]responses.Child, len(albums)) - for i, al := range albums { - albumList[i].Id = al.Id - albumList[i].Title = al.Name - albumList[i].Parent = al.ArtistId - albumList[i].IsDir = true - albumList[i].Album = al.Name - albumList[i].Year = al.Year - albumList[i].Artist = al.Artist - albumList[i].Genre = al.Genre - albumList[i].CoverArt = al.CoverArtId - if al.Starred { - t := time.Now() - albumList[i].Starred = &t - } + albumList[i] = c.ToChild(al) } response := c.NewEmpty() diff --git a/engine/common.go b/engine/common.go index 9b56ac97..bf1664f8 100644 --- a/engine/common.go +++ b/engine/common.go @@ -99,3 +99,11 @@ func FromMediaFile(mf *domain.MediaFile) Entry { c.UserRating = mf.Rating return c } + +func FromAlbums(albums domain.Albums) Entries { + entries := make(Entries, len(albums)) + for i, al := range albums { + entries[i] = FromAlbum(&al) + } + return entries +} diff --git a/engine/list_generator.go b/engine/list_generator.go index f4bbc7d1..86046a1c 100644 --- a/engine/list_generator.go +++ b/engine/list_generator.go @@ -8,13 +8,12 @@ import ( "github.com/deluan/gosonic/utils" ) -// TODO Use Entries instead of Albums type ListGenerator interface { - GetNewest(offset int, size int) (domain.Albums, error) - GetRecent(offset int, size int) (domain.Albums, error) - GetFrequent(offset int, size int) (domain.Albums, error) - GetHighest(offset int, size int) (domain.Albums, error) - GetRandom(offset int, size int) (domain.Albums, error) + GetNewest(offset int, size int) (Entries, error) + GetRecent(offset int, size int) (Entries, error) + GetFrequent(offset int, size int) (Entries, error) + GetHighest(offset int, size int) (Entries, error) + GetRandom(offset int, size int) (Entries, error) GetStarred() (Entries, error) GetNowPlaying() (Entries, error) } @@ -29,40 +28,42 @@ type listGenerator struct { npRepo NowPlayingRepository } -func (g listGenerator) query(qo domain.QueryOptions, offset int, size int) (domain.Albums, error) { +func (g listGenerator) query(qo domain.QueryOptions, offset int, size int) (Entries, error) { qo.Offset = offset qo.Size = size - return g.albumRepo.GetAll(qo) + albums, err := g.albumRepo.GetAll(qo) + + return FromAlbums(albums), err } -func (g listGenerator) GetNewest(offset int, size int) (domain.Albums, error) { +func (g listGenerator) GetNewest(offset int, size int) (Entries, error) { qo := domain.QueryOptions{SortBy: "CreatedAt", Desc: true, Alpha: true} return g.query(qo, offset, size) } -func (g listGenerator) GetRecent(offset int, size int) (domain.Albums, error) { +func (g listGenerator) GetRecent(offset int, size int) (Entries, error) { qo := domain.QueryOptions{SortBy: "PlayDate", Desc: true, Alpha: true} return g.query(qo, offset, size) } -func (g listGenerator) GetFrequent(offset int, size int) (domain.Albums, error) { +func (g listGenerator) GetFrequent(offset int, size int) (Entries, error) { qo := domain.QueryOptions{SortBy: "PlayCount", Desc: true} return g.query(qo, offset, size) } -func (g listGenerator) GetHighest(offset int, size int) (domain.Albums, error) { +func (g listGenerator) GetHighest(offset int, size int) (Entries, error) { qo := domain.QueryOptions{SortBy: "Rating", Desc: true} return g.query(qo, offset, size) } -func (g listGenerator) GetRandom(offset int, size int) (domain.Albums, error) { +func (g listGenerator) GetRandom(offset int, size int) (Entries, error) { ids, err := g.albumRepo.GetAllIds() if err != nil { return nil, err } size = utils.MinInt(size, len(ids)) perm := rand.Perm(size) - r := make(domain.Albums, size) + r := make(Entries, size) for i := 0; i < size; i++ { v := perm[i] @@ -70,7 +71,7 @@ func (g listGenerator) GetRandom(offset int, size int) (domain.Albums, error) { if err != nil { return nil, err } - r[i] = *al + r[i] = FromAlbum(al) } return r, nil } @@ -80,13 +81,8 @@ func (g listGenerator) GetStarred() (Entries, error) { if err != nil { return nil, err } - entries := make(Entries, len(albums)) - for i, al := range albums { - entries[i] = FromAlbum(&al) - } - - return entries, nil + return FromAlbums(albums), nil } func (g listGenerator) GetNowPlaying() (Entries, error) {