From ab10719d27ff6ecaf67e30844cd58a9bfec0b604 Mon Sep 17 00:00:00 2001 From: Deluan <deluan@deluan.com> Date: Sat, 8 Feb 2020 23:17:12 -0500 Subject: [PATCH] fix: use a regex to match year in ffmpeg date field. close #63 --- scanner/metadata_ffmpeg.go | 15 ++++++--------- scanner/metadata_test.go | 11 +++++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/scanner/metadata_ffmpeg.go b/scanner/metadata_ffmpeg.go index aca6f79e1..87217e2a4 100644 --- a/scanner/metadata_ffmpeg.go +++ b/scanner/metadata_ffmpeg.go @@ -201,20 +201,17 @@ var tagYearFormats = []string{ time.RFC3339, } +var dateRegex = regexp.MustCompile(`^([12]\d\d\d)`) + func (m *Metadata) parseYear(tagName string) int { if v, ok := m.tags[tagName]; ok { - var y time.Time - var err error - for _, fmt := range tagYearFormats { - if y, err = time.Parse(fmt, v); err == nil { - break - } - } - if err != nil { + match := dateRegex.FindStringSubmatch(v) + if len(match) == 0 { log.Error("Error parsing year from ffmpeg date field. Please report this issue", "file", m.filePath, "date", v) return 0 } - return y.Year() + year, _ := strconv.Atoi(match[1]) + return year } return 0 } diff --git a/scanner/metadata_test.go b/scanner/metadata_test.go index ba6724e32..a373e6d85 100644 --- a/scanner/metadata_test.go +++ b/scanner/metadata_test.go @@ -145,10 +145,13 @@ Tracklist: Context("parseYear", func() { It("parses the year correctly", func() { var examples = map[string]int{ - "1985": 1985, - "2002-01": 2002, - "1969.06": 1969, - "1980.07.25": 1980, + "1985": 1985, + "2002-01": 2002, + "1969.06": 1969, + "1980.07.25": 1980, + "2004-00-00": 2004, + "2013-May-12": 2013, + "May 12, 2016": 0, } for tag, expected := range examples { md := &Metadata{tags: map[string]string{"year": tag}}