mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-06 18:33:10 +03:00
46 lines
883 B
Go
46 lines
883 B
Go
package engine
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/deluan/navidrome/model"
|
|
)
|
|
|
|
type Browser interface {
|
|
GetSong(ctx context.Context, id string) (*Entry, error)
|
|
GetGenres(ctx context.Context) (model.Genres, error)
|
|
}
|
|
|
|
func NewBrowser(ds model.DataStore) Browser {
|
|
return &browser{ds}
|
|
}
|
|
|
|
type browser struct {
|
|
ds model.DataStore
|
|
}
|
|
|
|
func (b *browser) GetSong(ctx context.Context, id string) (*Entry, error) {
|
|
mf, err := b.ds.MediaFile(ctx).Get(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
entry := FromMediaFile(mf)
|
|
return &entry, nil
|
|
}
|
|
|
|
func (b *browser) GetGenres(ctx context.Context) (model.Genres, error) {
|
|
genres, err := b.ds.Genre(ctx).GetAll()
|
|
for i, g := range genres {
|
|
if strings.TrimSpace(g.Name) == "" {
|
|
genres[i].Name = "<Empty>"
|
|
}
|
|
}
|
|
sort.Slice(genres, func(i, j int) bool {
|
|
return genres[i].Name < genres[j].Name
|
|
})
|
|
return genres, err
|
|
}
|