From 371e8ab6caa06078aac1fc830283d52a606b0ad5 Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 24 Apr 2020 13:27:18 -0400 Subject: [PATCH] Generate Order Fields based on sanitized version of original fields --- model/mediafile.go | 1 + scanner/tag_scanner.go | 15 +++++++++++++-- scanner/tag_scanner_test.go | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 scanner/tag_scanner_test.go diff --git a/model/mediafile.go b/model/mediafile.go index bb1772ec..e27144a8 100644 --- a/model/mediafile.go +++ b/model/mediafile.go @@ -30,6 +30,7 @@ type MediaFile struct { SortArtistName string `json:"sortArtistName"` SortAlbumArtistName string `json:"sortAlbumArtistName"` OrderAlbumName string `json:"orderAlbumName"` + OrderArtistName string `json:"orderArtistName"` OrderAlbumArtistName string `json:"orderAlbumArtistName"` Compilation bool `json:"compilation"` CreatedAt time.Time `json:"createdAt"` diff --git a/scanner/tag_scanner.go b/scanner/tag_scanner.go index 6402cc90..16010b64 100644 --- a/scanner/tag_scanner.go +++ b/scanner/tag_scanner.go @@ -13,6 +13,8 @@ import ( "github.com/deluan/navidrome/consts" "github.com/deluan/navidrome/log" "github.com/deluan/navidrome/model" + "github.com/deluan/navidrome/utils" + "github.com/kennygrant/sanitize" ) type TagScanner struct { @@ -241,7 +243,7 @@ func (s *TagScanner) loadTracks(filePaths []string) (model.MediaFiles, error) { } func (s *TagScanner) toMediaFile(md *Metadata) model.MediaFile { - mf := model.MediaFile{} + mf := &model.MediaFile{} mf.ID = s.trackID(md) mf.Title = s.mapTrackTitle(md) mf.Album = md.Album() @@ -266,12 +268,21 @@ func (s *TagScanner) toMediaFile(md *Metadata) model.MediaFile { mf.SortAlbumName = md.SortAlbum() mf.SortArtistName = md.SortArtist() mf.SortAlbumArtistName = md.SortAlbumArtist() + mf.OrderAlbumName = sanitizeFieldForSorting(mf.Album) + mf.OrderArtistName = sanitizeFieldForSorting(mf.Artist) + mf.OrderAlbumArtistName = sanitizeFieldForSorting(mf.AlbumArtist) // TODO Get Creation time. https://github.com/djherbis/times ? mf.CreatedAt = md.ModificationTime() mf.UpdatedAt = md.ModificationTime() - return mf + return *mf +} + +func sanitizeFieldForSorting(originalValue string) string { + v := utils.NoArticle(originalValue) + v = strings.TrimSpace(sanitize.Accents(v)) + return utils.NoArticle(v) } func (s *TagScanner) mapTrackTitle(md *Metadata) string { diff --git a/scanner/tag_scanner_test.go b/scanner/tag_scanner_test.go new file mode 100644 index 00000000..41e56114 --- /dev/null +++ b/scanner/tag_scanner_test.go @@ -0,0 +1,21 @@ +package scanner + +import ( + "github.com/deluan/navidrome/conf" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("TagScanner", func() { + Describe("sanitizeFieldForSorting", func() { + BeforeEach(func() { + conf.Server.IgnoredArticles = "The" + }) + It("sanitize accents", func() { + Expect(sanitizeFieldForSorting("Céu")).To(Equal("Ceu")) + }) + It("removes articles", func() { + Expect(sanitizeFieldForSorting("The Beatles")).To(Equal("Beatles")) + }) + }) +})