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}}