From ea7ba22699795392614ecc86263df2c23a522dae Mon Sep 17 00:00:00 2001 From: Deluan Date: Tue, 26 Dec 2023 19:35:14 -0500 Subject: [PATCH] Discard duplicated tags --- scanner/metadata/metadata.go | 16 ++++++++++++++++ scanner/metadata/metadata_internal_test.go | 13 +++++++++++++ 2 files changed, 29 insertions(+) diff --git a/scanner/metadata/metadata.go b/scanner/metadata/metadata.go index e18d1b341..d12e875a2 100644 --- a/scanner/metadata/metadata.go +++ b/scanner/metadata/metadata.go @@ -57,6 +57,9 @@ func Extract(files ...string) (map[string]Tags, error) { } func NewTag(filePath string, fileInfo os.FileInfo, tags ParsedTags) Tags { + for t, values := range tags { + tags[t] = removeDuplicates(values) + } return Tags{ filePath: filePath, fileInfo: fileInfo, @@ -64,6 +67,19 @@ func NewTag(filePath string, fileInfo os.FileInfo, tags ParsedTags) Tags { } } +func removeDuplicates(values []string) []string { + encountered := map[string]struct{}{} + var result []string + for _, v := range values { + if _, ok := encountered[v]; ok { + continue + } + encountered[v] = struct{}{} + result = append(result, v) + } + return result +} + type ParsedTags map[string][]string func (p ParsedTags) Map(customMappings ParsedTags) ParsedTags { diff --git a/scanner/metadata/metadata_internal_test.go b/scanner/metadata/metadata_internal_test.go index 54b81b0b9..8831550f8 100644 --- a/scanner/metadata/metadata_internal_test.go +++ b/scanner/metadata/metadata_internal_test.go @@ -68,6 +68,19 @@ var _ = Describe("Tags", func() { }) }) + Describe("removeDuplicates", func() { + It("removes duplicates", func() { + md := NewTag("/music/artist/album01/Song.mp3", nil, ParsedTags{ + "genre": []string{"pop", "rock", "pop"}, + "date": []string{"2023-03-01", "2023-03-01"}, + "mood": []string{"happy", "sad"}, + }) + Expect(md.tags).To(HaveKeyWithValue("genre", []string{"pop", "rock"})) + Expect(md.tags).To(HaveKeyWithValue("date", []string{"2023-03-01"})) + Expect(md.tags).To(HaveKeyWithValue("mood", []string{"happy", "sad"})) + }) + }) + Describe("Bpm", func() { var t *Tags BeforeEach(func() {