navidrome/engine/playlists.go

56 lines
1.1 KiB
Go
Raw Normal View History

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-10 00:28:11 +01:00
func NewPlaylists(pr domain.PlaylistRepository, mr domain.MediaFileRepository) Playlists {
return playlists{pr, mr}
}
2016-03-10 00:28:11 +01:00
type playlists struct {
plsRepo domain.PlaylistRepository
mfileRepo domain.MediaFileRepository
}
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-11 15:10:40 +01:00
Entries []Entry
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-11 15:10:40 +01:00
pinfo.Entries = make([]Entry, 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
}