From abe569001871bd1482b115904a304f5a9178a6be Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 5 Jun 2024 22:09:27 -0400 Subject: [PATCH] Refactor string utilities into its own package `str` --- core/artwork/reader_artist.go | 4 +- core/external_metadata.go | 24 ++----- ...01213124814_add_all_artist_ids_to_album.go | 4 +- ...1026191915_unescape_lyrics_and_comments.go | 6 +- model/lyrics.go | 8 +-- model/mediafile.go | 4 +- persistence/artist_repository.go | 3 +- persistence/sql_search.go | 6 +- scanner/mapping.go | 12 ++-- server/serve_index.go | 8 +-- utils/sanitize_strings_test.go | 32 --------- utils/{ => str}/sanitize_strings.go | 12 +++- utils/str/sanitize_strings_test.go | 66 +++++++++++++++++++ utils/{strings.go => str/str.go} | 25 +++---- utils/str/str_suite_test.go | 13 ++++ utils/{strings_test.go => str/str_test.go} | 56 ++++++---------- 16 files changed, 158 insertions(+), 125 deletions(-) delete mode 100644 utils/sanitize_strings_test.go rename utils/{ => str}/sanitize_strings.go (72%) create mode 100644 utils/str/sanitize_strings_test.go rename utils/{strings.go => str/str.go} (61%) create mode 100644 utils/str/str_suite_test.go rename utils/{strings_test.go => str/str_test.go} (89%) diff --git a/core/artwork/reader_artist.go b/core/artwork/reader_artist.go index b25858f0..3e13da9b 100644 --- a/core/artwork/reader_artist.go +++ b/core/artwork/reader_artist.go @@ -17,7 +17,7 @@ import ( "github.com/navidrome/navidrome/core" "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" - "github.com/navidrome/navidrome/utils" + "github.com/navidrome/navidrome/utils/str" ) type artistReader struct { @@ -56,7 +56,7 @@ func newArtistReader(ctx context.Context, artwork *artwork, artID model.ArtworkI } } a.files = strings.Join(files, consts.Zwsp) - a.artistFolder = utils.LongestCommonPrefix(paths) + a.artistFolder = str.LongestCommonPrefix(paths) if !strings.HasSuffix(a.artistFolder, string(filepath.Separator)) { a.artistFolder, _ = filepath.Split(a.artistFolder) } diff --git a/core/external_metadata.go b/core/external_metadata.go index c95f044c..f0eec651 100644 --- a/core/external_metadata.go +++ b/core/external_metadata.go @@ -19,6 +19,7 @@ import ( "github.com/navidrome/navidrome/utils" . "github.com/navidrome/navidrome/utils/gg" "github.com/navidrome/navidrome/utils/random" + "github.com/navidrome/navidrome/utils/str" "golang.org/x/sync/errgroup" ) @@ -74,7 +75,7 @@ func (e *externalMetadata) getAlbum(ctx context.Context, id string) (*auxAlbum, switch v := entity.(type) { case *model.Album: album.Album = *v - album.Name = clearName(v.Name) + album.Name = str.Clear(v.Name) case *model.MediaFile: return e.getAlbum(ctx, v.AlbumID) default: @@ -164,7 +165,7 @@ func (e *externalMetadata) getArtist(ctx context.Context, id string) (*auxArtist switch v := entity.(type) { case *model.Artist: artist.Artist = *v - artist.Name = clearName(v.Name) + artist.Name = str.Clear(v.Name) case *model.MediaFile: return e.getArtist(ctx, v.ArtistID) case *model.Album: @@ -175,17 +176,6 @@ func (e *externalMetadata) getArtist(ctx context.Context, id string) (*auxArtist return &artist, nil } -// Replace some Unicode chars with their equivalent ASCII -func clearName(name string) string { - name = strings.ReplaceAll(name, "–", "-") - name = strings.ReplaceAll(name, "‐", "-") - name = strings.ReplaceAll(name, "“", `"`) - name = strings.ReplaceAll(name, "”", `"`) - name = strings.ReplaceAll(name, "‘", `'`) - name = strings.ReplaceAll(name, "’", `'`) - return name -} - func (e *externalMetadata) UpdateArtistInfo(ctx context.Context, id string, similarCount int, includeNotPresent bool) (*model.Artist, error) { artist, err := e.refreshArtistInfo(ctx, id) if err != nil { @@ -414,7 +404,7 @@ func (e *externalMetadata) findMatchingTrack(ctx context.Context, mbid string, a squirrel.Eq{"artist_id": artistID}, squirrel.Eq{"album_artist_id": artistID}, }, - squirrel.Like{"order_title": utils.SanitizeFieldForSorting(title)}, + squirrel.Like{"order_title": str.SanitizeFieldForSorting(title)}, }, Sort: "starred desc, rating desc, year asc, compilation asc ", Max: 1, @@ -434,11 +424,11 @@ func (e *externalMetadata) callGetURL(ctx context.Context, agent agents.ArtistUR } func (e *externalMetadata) callGetBiography(ctx context.Context, agent agents.ArtistBiographyRetriever, artist *auxArtist) { - bio, err := agent.GetArtistBiography(ctx, artist.ID, clearName(artist.Name), artist.MbzArtistID) + bio, err := agent.GetArtistBiography(ctx, artist.ID, str.Clear(artist.Name), artist.MbzArtistID) if err != nil { return } - bio = utils.SanitizeText(bio) + bio = str.SanitizeText(bio) bio = strings.ReplaceAll(bio, "\n", " ") artist.Biography = strings.ReplaceAll(bio, "