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() { func (c *AlbumListController) GetStarred() {
albums, err := c.listGen.GetStarred(0, -1) albums, mediaFiles, err := c.listGen.GetAllStarred()
if err != nil { if err != nil {
beego.Error("Error retrieving starred albums:", err) beego.Error("Error retrieving starred media:", err)
c.SendError(responses.ErrorGeneric, "Internal Error") c.SendError(responses.ErrorGeneric, "Internal Error")
} }
response := c.NewEmpty() response := c.NewEmpty()
response.Starred = &responses.Starred{} response.Starred = &responses.Starred{}
response.Starred.Album = c.ToChildren(albums) response.Starred.Album = c.ToChildren(albums)
response.Starred.Song = c.ToChildren(mediaFiles)
c.SendResponse(response) c.SendResponse(response)
} }
+2 -1
View File
@@ -28,7 +28,7 @@ type MediaFile struct {
PlayDate time.Time PlayDate time.Time
Rating int Rating int
Starred bool Starred bool
StarredAt time.Time StarredAt time.Time `idx:"Starred"`
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
} }
@@ -50,5 +50,6 @@ type MediaFileRepository interface {
Put(m *MediaFile) error Put(m *MediaFile) error
Get(id string) (*MediaFile, error) Get(id string) (*MediaFile, error)
FindByAlbum(albumId string) (MediaFiles, error) FindByAlbum(albumId string) (MediaFiles, error)
GetStarred(options QueryOptions) (MediaFiles, error)
PurgeInactive(active MediaFiles) ([]string, error) PurgeInactive(active MediaFiles) ([]string, error)
} }
+8
View File
@@ -99,3 +99,11 @@ func FromAlbums(albums domain.Albums) Entries {
} }
return 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) GetByName(offset int, size int) (Entries, error)
GetByArtist(offset int, size int) (Entries, error) GetByArtist(offset int, size int) (Entries, error)
GetStarred(offset int, size int) (Entries, error) GetStarred(offset int, size int) (Entries, error)
GetAllStarred() (albums Entries, mediaFiles Entries, err error)
GetNowPlaying() (Entries, error) GetNowPlaying() (Entries, error)
} }
@@ -98,6 +99,17 @@ func (g *listGenerator) GetStarred(offset int, size int) (Entries, error) {
return FromAlbums(albums), nil 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) { func (g *listGenerator) GetNowPlaying() (Entries, error) {
npInfo, err := g.npRepo.GetAll() npInfo, err := g.npRepo.GetAll()
if err != nil { if err != nil {
+9
View File
@@ -4,6 +4,8 @@ import (
"errors" "errors"
"sort" "sort"
"time"
"github.com/deluan/gosonic/domain" "github.com/deluan/gosonic/domain"
) )
@@ -43,6 +45,13 @@ func (r *mediaFileRepository) FindByAlbum(albumId string) (domain.MediaFiles, er
return mfs, err 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) { func (r *mediaFileRepository) PurgeInactive(active domain.MediaFiles) ([]string, error) {
return r.purgeInactive(active, func(e interface{}) string { return r.purgeInactive(active, func(e interface{}) string {
return e.(domain.MediaFile).Id return e.(domain.MediaFile).Id