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.
This commit is contained in:
lbonn 2020-12-18 16:48:36 +01:00 committed by Deluan Quintão
parent cd1c693a23
commit 15b289201a
3 changed files with 4 additions and 4 deletions

View File

@ -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

View File

@ -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,
}))
})

View File

@ -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}
>