getRandomSongs.view (partially) implemented

This commit is contained in:
Deluan
2016-03-29 00:01:27 -04:00
parent 880521360f
commit 768764bea7
7 changed files with 70 additions and 5 deletions
+21
View File
@@ -19,6 +19,7 @@ type ListGenerator interface {
GetStarred(offset int, size int) (Entries, error)
GetAllStarred() (albums Entries, mediaFiles Entries, err error)
GetNowPlaying() (Entries, error)
GetRandomSongs(size int) (Entries, error)
}
func NewListGenerator(alr domain.AlbumRepository, mfr domain.MediaFileRepository, npr NowPlayingRepository) ListGenerator {
@@ -89,6 +90,26 @@ func (g *listGenerator) GetRandom(offset int, size int) (Entries, error) {
return r, nil
}
func (g *listGenerator) GetRandomSongs(size int) (Entries, error) {
ids, err := g.mfRepository.GetAllIds()
if err != nil {
return nil, err
}
size = utils.MinInt(size, len(ids))
perm := rand.Perm(size)
r := make(Entries, size)
for i := 0; i < size; i++ {
v := perm[i]
mf, err := g.mfRepository.Get(ids[v])
if err != nil {
return nil, err
}
r[i] = FromMediaFile(mf)
}
return r, nil
}
func (g *listGenerator) GetStarred(offset int, size int) (Entries, error) {
qo := domain.QueryOptions{Offset: offset, Size: size, Desc: true}
albums, err := g.albumRepo.GetStarred(qo)