fix: use a regex to match year in ffmpeg date field. close #63

This commit is contained in:
Deluan 2020-02-08 23:17:12 -05:00
parent 029290f304
commit ab10719d27
2 changed files with 13 additions and 13 deletions

View File

@ -201,20 +201,17 @@ var tagYearFormats = []string{
time.RFC3339, time.RFC3339,
} }
var dateRegex = regexp.MustCompile(`^([12]\d\d\d)`)
func (m *Metadata) parseYear(tagName string) int { func (m *Metadata) parseYear(tagName string) int {
if v, ok := m.tags[tagName]; ok { if v, ok := m.tags[tagName]; ok {
var y time.Time match := dateRegex.FindStringSubmatch(v)
var err error if len(match) == 0 {
for _, fmt := range tagYearFormats {
if y, err = time.Parse(fmt, v); err == nil {
break
}
}
if err != nil {
log.Error("Error parsing year from ffmpeg date field. Please report this issue", "file", m.filePath, "date", v) log.Error("Error parsing year from ffmpeg date field. Please report this issue", "file", m.filePath, "date", v)
return 0 return 0
} }
return y.Year() year, _ := strconv.Atoi(match[1])
return year
} }
return 0 return 0
} }

View File

@ -145,10 +145,13 @@ Tracklist:
Context("parseYear", func() { Context("parseYear", func() {
It("parses the year correctly", func() { It("parses the year correctly", func() {
var examples = map[string]int{ var examples = map[string]int{
"1985": 1985, "1985": 1985,
"2002-01": 2002, "2002-01": 2002,
"1969.06": 1969, "1969.06": 1969,
"1980.07.25": 1980, "1980.07.25": 1980,
"2004-00-00": 2004,
"2013-May-12": 2013,
"May 12, 2016": 0,
} }
for tag, expected := range examples { for tag, expected := range examples {
md := &Metadata{tags: map[string]string{"year": tag}} md := &Metadata{tags: map[string]string{"year": tag}}