Add "inspect" command to CLI

This commit is contained in:
Deluan
2023-12-27 12:41:08 -05:00
parent ea7ba22699
commit 798b03eabd
6 changed files with 154 additions and 37 deletions
+16 -6
View File
@@ -58,25 +58,35 @@ 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)
values = removeDuplicatesAndEmpty(values)
if len(values) == 0 {
delete(tags, t)
continue
}
tags[t] = values
}
return Tags{
filePath: filePath,
fileInfo: fileInfo,
tags: tags,
Tags: tags,
}
}
func removeDuplicates(values []string) []string {
func removeDuplicatesAndEmpty(values []string) []string {
encountered := map[string]struct{}{}
empty := true
var result []string
for _, v := range values {
if _, ok := encountered[v]; ok {
continue
}
encountered[v] = struct{}{}
empty = empty && v == ""
result = append(result, v)
}
if empty {
return nil
}
return result
}
@@ -100,7 +110,7 @@ func (p ParsedTags) Map(customMappings ParsedTags) ParsedTags {
type Tags struct {
filePath string
fileInfo os.FileInfo
tags ParsedTags
Tags ParsedTags
}
// Common tags
@@ -207,7 +217,7 @@ func (t Tags) getPeakValue(tagName string) float64 {
func (t Tags) getTags(tagNames ...string) []string {
for _, tag := range tagNames {
if v, ok := t.tags[tag]; ok {
if v, ok := t.Tags[tag]; ok {
return v
}
}
@@ -225,7 +235,7 @@ func (t Tags) getFirstTagValue(tagNames ...string) string {
func (t Tags) getAllTagValues(tagNames ...string) []string {
var values []string
for _, tag := range tagNames {
if v, ok := t.tags[tag]; ok {
if v, ok := t.Tags[tag]; ok {
values = append(values, v...)
}
}
+17 -9
View File
@@ -9,7 +9,7 @@ var _ = Describe("Tags", func() {
DescribeTable("getDate",
func(tag string, expectedYear int, expectedDate string) {
md := &Tags{}
md.tags = map[string][]string{"date": {tag}}
md.Tags = map[string][]string{"date": {tag}}
testYear, testDate := md.Date()
Expect(testYear).To(Equal(expectedYear))
Expect(testDate).To(Equal(expectedDate))
@@ -29,7 +29,7 @@ var _ = Describe("Tags", func() {
Describe("getMbzID", func() {
It("return a valid MBID", func() {
md := &Tags{}
md.tags = map[string][]string{
md.Tags = map[string][]string{
"musicbrainz_trackid": {"8f84da07-09a0-477b-b216-cc982dabcde1"},
"musicbrainz_releasetrackid": {"6caf16d3-0b20-3fe6-8020-52e31831bc11"},
"musicbrainz_albumid": {"f68c985d-f18b-4f4a-b7f0-87837cf3fbf9"},
@@ -44,7 +44,7 @@ var _ = Describe("Tags", func() {
})
It("return empty string for invalid MBID", func() {
md := &Tags{}
md.tags = map[string][]string{
md.Tags = map[string][]string{
"musicbrainz_trackid": {"11406732-6"},
"musicbrainz_albumid": {"11406732"},
"musicbrainz_artistid": {"200455"},
@@ -60,7 +60,7 @@ var _ = Describe("Tags", func() {
Describe("getAllTagValues", func() {
It("returns values from all tag names", func() {
md := &Tags{}
md.tags = map[string][]string{
md.Tags = map[string][]string{
"genre": {"Rock", "Pop", "New Wave"},
}
@@ -68,23 +68,31 @@ var _ = Describe("Tags", func() {
})
})
Describe("removeDuplicates", func() {
Describe("removeDuplicatesAndEmpty", 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"}))
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"}))
})
It("removes empty tags", func() {
md := NewTag("/music/artist/album01/Song.mp3", nil, ParsedTags{
"genre": []string{"pop", "rock", "pop"},
"mood": []string{"", ""},
})
Expect(md.Tags).To(HaveKeyWithValue("genre", []string{"pop", "rock"}))
Expect(md.Tags).ToNot(HaveKey("mood"))
})
})
Describe("Bpm", func() {
var t *Tags
BeforeEach(func() {
t = &Tags{tags: map[string][]string{
t = &Tags{Tags: map[string][]string{
"fbpm": []string{"141.7"},
}}
})