2016-03-09 16:09:15 +01:00
|
|
|
package engine
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/deluan/gosonic/domain"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Playlists interface {
|
|
|
|
GetAll() (*domain.Playlists, error)
|
2016-03-10 00:28:11 +01:00
|
|
|
Get(id string) (*PlaylistInfo, error)
|
2016-03-09 16:09:15 +01:00
|
|
|
}
|
|
|
|
|
2016-03-10 00:28:11 +01:00
|
|
|
func NewPlaylists(pr domain.PlaylistRepository, mr domain.MediaFileRepository) Playlists {
|
|
|
|
return playlists{pr, mr}
|
2016-03-09 16:09:15 +01:00
|
|
|
}
|
|
|
|
|
2016-03-10 00:28:11 +01:00
|
|
|
type playlists struct {
|
|
|
|
plsRepo domain.PlaylistRepository
|
|
|
|
mfileRepo domain.MediaFileRepository
|
2016-03-09 16:09:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p playlists) GetAll() (*domain.Playlists, error) {
|
|
|
|
return p.plsRepo.GetAll(domain.QueryOptions{})
|
|
|
|
}
|
2016-03-10 00:28:11 +01:00
|
|
|
|
|
|
|
type PlaylistInfo struct {
|
|
|
|
Id string
|
|
|
|
Name string
|
2016-03-14 16:42:33 +01:00
|
|
|
Entries Entries
|
2016-03-10 00:28:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p playlists) Get(id string) (*PlaylistInfo, error) {
|
|
|
|
pl, err := p.plsRepo.Get(id)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if pl == nil {
|
2016-03-10 17:25:15 +01:00
|
|
|
return nil, ErrDataNotFound
|
2016-03-10 00:28:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pinfo := &PlaylistInfo{Id: pl.Id, Name: pl.Name}
|
2016-03-14 16:42:33 +01:00
|
|
|
pinfo.Entries = make(Entries, len(pl.Tracks))
|
2016-03-10 00:28:11 +01:00
|
|
|
|
|
|
|
// TODO Optimize: Get all tracks at once
|
|
|
|
for i, mfId := range pl.Tracks {
|
|
|
|
mf, err := p.mfileRepo.Get(mfId)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2016-03-11 15:10:40 +01:00
|
|
|
pinfo.Entries[i] = FromMediaFile(mf)
|
|
|
|
pinfo.Entries[i].Track = 0
|
2016-03-10 00:28:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return pinfo, nil
|
|
|
|
}
|