mirror of
https://github.com/navidrome/navidrome.git
synced 2025-05-19 11:36:37 +03:00
108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
package db_storm
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/asdine/storm/q"
|
|
"github.com/cloudsonic/sonic-server/domain"
|
|
)
|
|
|
|
type _MediaFile struct {
|
|
ID string ``
|
|
Path string ``
|
|
Title string ``
|
|
Album string ``
|
|
Artist string ``
|
|
ArtistID string ``
|
|
AlbumArtist string ``
|
|
AlbumID string `storm:"index"`
|
|
HasCoverArt bool ``
|
|
TrackNumber int ``
|
|
DiscNumber int ``
|
|
Year int ``
|
|
Size string ``
|
|
Suffix string ``
|
|
Duration int ``
|
|
BitRate int ``
|
|
Genre string ``
|
|
Compilation bool ``
|
|
PlayCount int ``
|
|
PlayDate time.Time ``
|
|
Rating int ``
|
|
Starred bool `storm:"index"`
|
|
StarredAt time.Time ``
|
|
CreatedAt time.Time ``
|
|
UpdatedAt time.Time ``
|
|
}
|
|
|
|
type mediaFileRepository struct {
|
|
stormRepository
|
|
}
|
|
|
|
func NewMediaFileRepository() domain.MediaFileRepository {
|
|
r := &mediaFileRepository{}
|
|
r.init(&_MediaFile{})
|
|
return r
|
|
}
|
|
|
|
func (r *mediaFileRepository) Put(m *domain.MediaFile) error {
|
|
tm := _MediaFile(*m)
|
|
return Db().Save(&tm)
|
|
}
|
|
|
|
func (r *mediaFileRepository) Get(id string) (*domain.MediaFile, error) {
|
|
tm := &_MediaFile{}
|
|
err := r.getByID(id, tm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
a := domain.MediaFile(*tm)
|
|
return &a, nil
|
|
}
|
|
|
|
func (r *mediaFileRepository) toMediaFiles(all []_MediaFile) (domain.MediaFiles, error) {
|
|
result := make(domain.MediaFiles, len(all))
|
|
for i, m := range all {
|
|
result[i] = domain.MediaFile(m)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (r *mediaFileRepository) FindByAlbum(albumId string) (domain.MediaFiles, error) {
|
|
var mfs []_MediaFile
|
|
err := r.execute(q.Eq("AlbumID", albumId), &mfs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return r.toMediaFiles(mfs)
|
|
}
|
|
|
|
func (r *mediaFileRepository) GetStarred(options domain.QueryOptions) (domain.MediaFiles, error) {
|
|
var starred []_MediaFile
|
|
err := r.execute(q.Eq("Starred", true), &starred, &options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return r.toMediaFiles(starred)
|
|
}
|
|
|
|
func (r *mediaFileRepository) GetAllIds() ([]string, error) {
|
|
var all []_MediaFile
|
|
err := r.getAll(&all, &domain.QueryOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := make([]string, len(all))
|
|
for i, m := range all {
|
|
result[i] = domain.MediaFile(m).ID
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (r *mediaFileRepository) PurgeInactive(activeList domain.MediaFiles) ([]string, error) {
|
|
return r.purgeInactive(activeList)
|
|
}
|
|
|
|
var _ domain.MediaFileRepository = (*mediaFileRepository)(nil)
|
|
var _ = domain.MediaFile(_MediaFile{})
|