diff --git a/domain/index.go b/domain/index.go index 1406dbab5..11e91c78c 100644 --- a/domain/index.go +++ b/domain/index.go @@ -1,5 +1,7 @@ package domain +import "github.com/deluan/gosonic/utils" + type ArtistInfo struct { ArtistId string Artist string @@ -7,7 +9,14 @@ type ArtistInfo struct { type ArtistIndex struct { Id string - Artists []ArtistInfo + Artists ArtistInfos +} + +type ArtistInfos []ArtistInfo +func (a ArtistInfos) Len() int { return len(a) } +func (a ArtistInfos) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ArtistInfos) Less(i, j int) bool { + return utils.NoArticle(a[i].Artist) < utils.NoArticle(a[j].Artist) } type ArtistIndexes []ArtistIndex diff --git a/domain/mediafile.go b/domain/mediafile.go index ee26d25da..658e88ad4 100644 --- a/domain/mediafile.go +++ b/domain/mediafile.go @@ -33,6 +33,11 @@ func (mf *MediaFile) ContentType() string { } type MediaFiles []MediaFile +func (a MediaFiles) Len() int { return len(a) } +func (a MediaFiles) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a MediaFiles) Less(i, j int) bool { + return (a[i].DiscNumber * 1000 + a[i].TrackNumber) < (a[j].DiscNumber * 1000 + a[j].TrackNumber) +} type MediaFileRepository interface { BaseRepository diff --git a/persistence/index_repository.go b/persistence/index_repository.go index 664e247dd..2f2c08188 100644 --- a/persistence/index_repository.go +++ b/persistence/index_repository.go @@ -3,7 +3,6 @@ package persistence import ( "errors" "github.com/deluan/gosonic/domain" - "github.com/deluan/gosonic/utils" "sort" ) @@ -21,7 +20,7 @@ func (r *artistIndexRepository) Put(m *domain.ArtistIndex) error { if m.Id == "" { return errors.New("Id is not set") } - sort.Sort(byArtistName(m.Artists)) + sort.Sort(m.Artists) return r.saveOrUpdate(m.Id, m) } @@ -37,16 +36,4 @@ func (r *artistIndexRepository) GetAll() (domain.ArtistIndexes, error) { return indices, err } -type byArtistName []domain.ArtistInfo - -func (a byArtistName) Len() int { - return len(a) -} -func (a byArtistName) Swap(i, j int) { - a[i], a[j] = a[j], a[i] -} -func (a byArtistName) Less(i, j int) bool { - return utils.NoArticle(a[i].Artist) < utils.NoArticle(a[j].Artist) -} - var _ domain.ArtistIndexRepository = (*artistIndexRepository)(nil) \ No newline at end of file diff --git a/persistence/mediafile_repository.go b/persistence/mediafile_repository.go index 390506e22..3a2aa9ae0 100644 --- a/persistence/mediafile_repository.go +++ b/persistence/mediafile_repository.go @@ -27,20 +27,8 @@ func (r *mediaFileRepository) Get(id string) (*domain.MediaFile, error) { func (r *mediaFileRepository) FindByAlbum(albumId string) (domain.MediaFiles, error) { var mfs = make(domain.MediaFiles, 0) err := r.loadChildren("album", albumId, &mfs, "", false) - sort.Sort(byTrackNumber(mfs)) + sort.Sort(mfs) return mfs, err } -type byTrackNumber domain.MediaFiles - -func (a byTrackNumber) Len() int { - return len(a) -} -func (a byTrackNumber) Swap(i, j int) { - a[i], a[j] = a[j], a[i] -} -func (a byTrackNumber) Less(i, j int) bool { - return (a[i].DiscNumber * 1000 + a[i].TrackNumber) < (a[j].DiscNumber * 1000 + a[j].TrackNumber) -} - var _ domain.MediaFileRepository = (*mediaFileRepository)(nil) \ No newline at end of file