From 427065a418dc2e26e5e606a62ec73a3d05bea601 Mon Sep 17 00:00:00 2001 From: lbonn Date: Fri, 18 Dec 2020 16:48:36 +0100 Subject: [PATCH] Fall back to media file path when sorting If files cannot be sorted by disc and track id, try by artist then title. One use case is a loose compilation of files with same album, album artist, and no track numbers. File order was then undetermined, in practice depended on insertion order in the database. --- persistence/mediafile_repository.go | 4 ++-- persistence/mediafile_repository_test.go | 2 +- ui/src/album/AlbumShow.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/persistence/mediafile_repository.go b/persistence/mediafile_repository.go index d01421052..7c713b579 100644 --- a/persistence/mediafile_repository.go +++ b/persistence/mediafile_repository.go @@ -27,7 +27,7 @@ func NewMediaFileRepository(ctx context.Context, o orm.Ormer) *mediaFileReposito r.tableName = "media_file" r.sortMappings = map[string]string{ "artist": "order_artist_name asc, album asc, disc_number asc, track_number asc", - "album": "order_album_name asc, disc_number asc, track_number asc", + "album": "order_album_name asc, disc_number asc, track_number asc, artist asc, title asc", "random": "RANDOM()", } r.filterMappings = map[string]filterFunc{ @@ -77,7 +77,7 @@ func (r mediaFileRepository) GetAll(options ...model.QueryOptions) (model.MediaF } func (r mediaFileRepository) FindByAlbum(albumId string) (model.MediaFiles, error) { - sel := r.selectMediaFile().Where(Eq{"album_id": albumId}).OrderBy("disc_number", "track_number") + sel := r.selectMediaFile().Where(Eq{"album_id": albumId}).OrderBy("disc_number", "track_number", "artist", "title") res := model.MediaFiles{} err := r.queryAll(sel, &res) return res, err diff --git a/persistence/mediafile_repository_test.go b/persistence/mediafile_repository_test.go index 4b42ad3b2..758bf8a71 100644 --- a/persistence/mediafile_repository_test.go +++ b/persistence/mediafile_repository_test.go @@ -42,8 +42,8 @@ var _ = Describe("MediaRepository", func() { It("find mediafiles by album", func() { Expect(mr.FindByAlbum("103")).To(Equal(model.MediaFiles{ - songRadioactivity, songAntenna, + songRadioactivity, })) }) diff --git a/ui/src/album/AlbumShow.js b/ui/src/album/AlbumShow.js index fab30017c..8cfd2729f 100644 --- a/ui/src/album/AlbumShow.js +++ b/ui/src/album/AlbumShow.js @@ -22,7 +22,7 @@ const AlbumShowLayout = (props) => { addLabel={false} reference="albumSong" target="album_id" - sort={{ field: 'discNumber asc, trackNumber asc', order: 'ASC' }} + sort={{ field: 'album', order: 'ASC' }} perPage={0} pagination={null} >