All ListGenerator's methods now returns Entries, and not Albums anymore

This commit is contained in:
Deluan
2016-03-21 11:37:56 -04:00
parent 0b286afa08
commit 516bd3bddf
3 changed files with 32 additions and 44 deletions
+7 -23
View File
@@ -1,11 +1,8 @@
package api package api
import ( import (
"time"
"github.com/astaxie/beego" "github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses" "github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/domain"
"github.com/deluan/gosonic/engine" "github.com/deluan/gosonic/engine"
"github.com/deluan/gosonic/utils" "github.com/deluan/gosonic/utils"
) )
@@ -16,17 +13,17 @@ type AlbumListController struct {
types map[string]strategy 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() { func (c *AlbumListController) Prepare() {
utils.ResolveDependencies(&c.listGen) utils.ResolveDependencies(&c.listGen)
c.types = map[string]strategy{ c.types = map[string]strategy{
"random": func(o int, s int) (domain.Albums, error) { return c.listGen.GetRandom(o, s) }, "random": func(o int, s int) (engine.Entries, error) { return c.listGen.GetRandom(o, s) },
"newest": func(o int, s int) (domain.Albums, error) { return c.listGen.GetNewest(o, s) }, "newest": func(o int, s int) (engine.Entries, error) { return c.listGen.GetNewest(o, s) },
"recent": func(o int, s int) (domain.Albums, error) { return c.listGen.GetRecent(o, s) }, "recent": func(o int, s int) (engine.Entries, error) { return c.listGen.GetRecent(o, s) },
"frequent": func(o int, s int) (domain.Albums, error) { return c.listGen.GetFrequent(o, s) }, "frequent": func(o int, s int) (engine.Entries, error) { return c.listGen.GetFrequent(o, s) },
"highest": func(o int, s int) (domain.Albums, error) { return c.listGen.GetHighest(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)) albumList := make([]responses.Child, len(albums))
for i, al := range albums { for i, al := range albums {
albumList[i].Id = al.Id albumList[i] = c.ToChild(al)
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
}
} }
response := c.NewEmpty() response := c.NewEmpty()
+8
View File
@@ -99,3 +99,11 @@ func FromMediaFile(mf *domain.MediaFile) Entry {
c.UserRating = mf.Rating c.UserRating = mf.Rating
return c return c
} }
func FromAlbums(albums domain.Albums) Entries {
entries := make(Entries, len(albums))
for i, al := range albums {
entries[i] = FromAlbum(&al)
}
return entries
}
+17 -21
View File
@@ -8,13 +8,12 @@ import (
"github.com/deluan/gosonic/utils" "github.com/deluan/gosonic/utils"
) )
// TODO Use Entries instead of Albums
type ListGenerator interface { type ListGenerator interface {
GetNewest(offset int, size int) (domain.Albums, error) GetNewest(offset int, size int) (Entries, error)
GetRecent(offset int, size int) (domain.Albums, error) GetRecent(offset int, size int) (Entries, error)
GetFrequent(offset int, size int) (domain.Albums, error) GetFrequent(offset int, size int) (Entries, error)
GetHighest(offset int, size int) (domain.Albums, error) GetHighest(offset int, size int) (Entries, error)
GetRandom(offset int, size int) (domain.Albums, error) GetRandom(offset int, size int) (Entries, error)
GetStarred() (Entries, error) GetStarred() (Entries, error)
GetNowPlaying() (Entries, error) GetNowPlaying() (Entries, error)
} }
@@ -29,40 +28,42 @@ type listGenerator struct {
npRepo NowPlayingRepository 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.Offset = offset
qo.Size = size 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} qo := domain.QueryOptions{SortBy: "CreatedAt", Desc: true, Alpha: true}
return g.query(qo, offset, size) 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} qo := domain.QueryOptions{SortBy: "PlayDate", Desc: true, Alpha: true}
return g.query(qo, offset, size) 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} qo := domain.QueryOptions{SortBy: "PlayCount", Desc: true}
return g.query(qo, offset, size) 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} qo := domain.QueryOptions{SortBy: "Rating", Desc: true}
return g.query(qo, offset, size) 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() ids, err := g.albumRepo.GetAllIds()
if err != nil { if err != nil {
return nil, err return nil, err
} }
size = utils.MinInt(size, len(ids)) size = utils.MinInt(size, len(ids))
perm := rand.Perm(size) perm := rand.Perm(size)
r := make(domain.Albums, size) r := make(Entries, size)
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
v := perm[i] v := perm[i]
@@ -70,7 +71,7 @@ func (g listGenerator) GetRandom(offset int, size int) (domain.Albums, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
r[i] = *al r[i] = FromAlbum(al)
} }
return r, nil return r, nil
} }
@@ -80,13 +81,8 @@ func (g listGenerator) GetStarred() (Entries, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
entries := make(Entries, len(albums))
for i, al := range albums { return FromAlbums(albums), nil
entries[i] = FromAlbum(&al)
}
return entries, nil
} }
func (g listGenerator) GetNowPlaying() (Entries, error) { func (g listGenerator) GetNowPlaying() (Entries, error) {