Fix extracting tags with spaces in the tagname ("Ex: Album Artist")

This commit is contained in:
Deluan 2020-09-22 14:42:36 -04:00
parent 9edd7e9025
commit afe5a5b32a
3 changed files with 21 additions and 9 deletions

View File

@ -51,7 +51,7 @@ var (
inputRegex = regexp.MustCompile(`(?m)^Input #\d+,.*,\sfrom\s'(.*)'`)
// TITLE : Back In Black
tagsRx = regexp.MustCompile(`(?i)^\s{4,6}([\w-]+)\s*:(.*)`)
tagsRx = regexp.MustCompile(`(?i)^\s{4,6}([\w\s-]+)\s*:(.*)`)
// Duration: 00:04:16.00, start: 0.000000, bitrate: 995 kb/s`
durationRx = regexp.MustCompile(`^\s\sDuration: ([\d.:]+).*bitrate: (\d+)`)
@ -114,7 +114,7 @@ func (m *ffmpegMetadata) parseInfo(info string) {
}
match := tagsRx.FindStringSubmatch(line)
if len(match) > 0 {
tagName := strings.ToLower(match[1])
tagName := strings.TrimSpace(strings.ToLower(match[1]))
tagValue := strings.TrimSpace(match[2])
// Skip when the tag was previously found

View File

@ -213,6 +213,16 @@ Input #0, mp3, from '/Users/deluan/Downloads/椎名林檎 - 加爾基 精液 栗
Expect(md.SortArtist()).To(Equal("Shiina, Ringo"))
Expect(md.SortAlbumArtist()).To(Equal("Shiina, Ringo"))
})
It("parses tags with spaces in the name", func() {
const output = `
Input #0, mp3, from '/Users/deluan/Music/Music/Media/_/Wyclef Jean - From the Hut, to the Projects, to the Mansion/10 - The Struggle (interlude).mp3':
Metadata:
ALBUM ARTIST : Wyclef Jean
`
md, _ := e.extractMetadata("tests/fixtures/test.mp3", output)
Expect(md.AlbumArtist()).To(Equal("Wyclef Jean"))
})
})
It("creates a valid command line", func() {

View File

@ -65,13 +65,15 @@ type baseMetadata struct {
tags map[string]string
}
func (m *baseMetadata) Title() string { return m.getTag("title", "sort_name", "titlesort") }
func (m *baseMetadata) Album() string { return m.getTag("album", "sort_album", "albumsort") }
func (m *baseMetadata) Artist() string { return m.getTag("artist", "sort_artist", "artistsort") }
func (m *baseMetadata) AlbumArtist() string { return m.getTag("album_artist", "albumartist") }
func (m *baseMetadata) SortTitle() string { return m.getSortTag("", "title", "name") }
func (m *baseMetadata) SortAlbum() string { return m.getSortTag("", "album") }
func (m *baseMetadata) SortArtist() string { return m.getSortTag("", "artist") }
func (m *baseMetadata) Title() string { return m.getTag("title", "sort_name", "titlesort") }
func (m *baseMetadata) Album() string { return m.getTag("album", "sort_album", "albumsort") }
func (m *baseMetadata) Artist() string { return m.getTag("artist", "sort_artist", "artistsort") }
func (m *baseMetadata) AlbumArtist() string {
return m.getTag("album_artist", "album artist", "albumartist")
}
func (m *baseMetadata) SortTitle() string { return m.getSortTag("", "title", "name") }
func (m *baseMetadata) SortAlbum() string { return m.getSortTag("", "album") }
func (m *baseMetadata) SortArtist() string { return m.getSortTag("", "artist") }
func (m *baseMetadata) SortAlbumArtist() string {
return m.getSortTag("tso2", "albumartist", "album_artist")
}