GetStarred now returns starred songs

This commit is contained in:
Deluan
2016-03-23 19:02:58 -04:00
parent 1ed8c60130
commit d59394c653
5 changed files with 34 additions and 3 deletions
+3 -2
View File
@@ -54,15 +54,16 @@ func (c *AlbumListController) GetAlbumList() {
}
func (c *AlbumListController) GetStarred() {
albums, err := c.listGen.GetStarred(0, -1)
albums, mediaFiles, err := c.listGen.GetAllStarred()
if err != nil {
beego.Error("Error retrieving starred albums:", err)
beego.Error("Error retrieving starred media:", err)
c.SendError(responses.ErrorGeneric, "Internal Error")
}
response := c.NewEmpty()
response.Starred = &responses.Starred{}
response.Starred.Album = c.ToChildren(albums)
response.Starred.Song = c.ToChildren(mediaFiles)
c.SendResponse(response)
}
+2 -1
View File
@@ -28,7 +28,7 @@ type MediaFile struct {
PlayDate time.Time
Rating int
Starred bool
StarredAt time.Time
StarredAt time.Time `idx:"Starred"`
CreatedAt time.Time
UpdatedAt time.Time
}
@@ -50,5 +50,6 @@ type MediaFileRepository interface {
Put(m *MediaFile) error
Get(id string) (*MediaFile, error)
FindByAlbum(albumId string) (MediaFiles, error)
GetStarred(options QueryOptions) (MediaFiles, error)
PurgeInactive(active MediaFiles) ([]string, error)
}
+8
View File
@@ -99,3 +99,11 @@ func FromAlbums(albums domain.Albums) Entries {
}
return entries
}
func FromMediaFiles(mfs domain.MediaFiles) Entries {
entries := make(Entries, len(mfs))
for i, mf := range mfs {
entries[i] = FromMediaFile(&mf)
}
return entries
}
+12
View File
@@ -17,6 +17,7 @@ type ListGenerator interface {
GetByName(offset int, size int) (Entries, error)
GetByArtist(offset int, size int) (Entries, error)
GetStarred(offset int, size int) (Entries, error)
GetAllStarred() (albums Entries, mediaFiles Entries, err error)
GetNowPlaying() (Entries, error)
}
@@ -98,6 +99,17 @@ func (g *listGenerator) GetStarred(offset int, size int) (Entries, error) {
return FromAlbums(albums), nil
}
func (g *listGenerator) GetAllStarred() (Entries, Entries, error) {
albums, err := g.GetStarred(0, -1)
if err != nil {
return nil, nil, err
}
mediaFiles, err := g.mfRepository.GetStarred(domain.QueryOptions{Desc: true})
return albums, FromMediaFiles(mediaFiles), err
}
func (g *listGenerator) GetNowPlaying() (Entries, error) {
npInfo, err := g.npRepo.GetAll()
if err != nil {
+9
View File
@@ -4,6 +4,8 @@ import (
"errors"
"sort"
"time"
"github.com/deluan/gosonic/domain"
)
@@ -43,6 +45,13 @@ func (r *mediaFileRepository) FindByAlbum(albumId string) (domain.MediaFiles, er
return mfs, err
}
func (r *mediaFileRepository) GetStarred(options domain.QueryOptions) (domain.MediaFiles, error) {
var mfs = make(domain.MediaFiles, 0)
start := time.Time{}.Add(time.Duration(1) * time.Hour)
err := r.loadRange("Starred", start, time.Now(), &mfs, options)
return mfs, err
}
func (r *mediaFileRepository) PurgeInactive(active domain.MediaFiles) ([]string, error) {
return r.purgeInactive(active, func(e interface{}) string {
return e.(domain.MediaFile).Id