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
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()
+8
View File
@@ -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
}
+17 -21
View File
@@ -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) {