diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-03-04 17:59:49 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-03-04 18:07:28 +0100 |
commit | be483a3681ec0bfb7237b99f53b3bdd9dcde3eb4 (patch) | |
tree | 3c61ca77943035c25d5ab752c0995eeb0edf20e1 | |
parent | 8bf0d319493f3b1819279fb1ec7c30347f8ecce6 (diff) |
Support season-only tags
-rw-r--r-- | parser/parser.go | 36 | ||||
-rw-r--r-- | parser/parser_test.go | 14 |
2 files changed, 32 insertions, 18 deletions
diff --git a/parser/parser.go b/parser/parser.go index f9bb2ae..06cf0b9 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -8,11 +8,12 @@ import ( var ( movieExp = regexp.MustCompile(`(.*?)\.(\d{4})`) - episodeExp = regexp.MustCompile("(.*)\\.(?:(" + - "(?:S(\\d{2}))?E(\\d{2})" + // S01E04, E04 - "|(\\d{1,2})x(\\d{2})" + // 1x04, 01x04 - "|Part\\.?(\\d{1,2})" + // Part4, Part11, Part.4, Part.11 - "))") + episodeExp = regexp.MustCompile(`(.*)\.(?:(` + + `(?:S(\d{2}))(?:E(\d{2}))?` + // S01, S01E04 + `|(?:E(\d{2}))` + // E04 + `|(\d{1,2})x(\d{2})` + // 1x04, 01x04 + `|Part\.?(\d{1,2})` + // Part4, Part11, Part.4, Part.11 + `))`) ) type Parser func(s string) (Media, error) @@ -67,21 +68,20 @@ func Show(s string) (Media, error) { return Media{}, fmt.Errorf("failed to parse: %s", s) } name := m[0][1] - var season string - var episode string - if m[0][4] != "" { - if m[0][3] != "" { - season = m[0][3] - } else { - season = "1" + season := "1" + episode := "0" + if m[0][3] != "" { // S01, S01E04 + season = m[0][3] + if m[0][4] != "" { + episode = m[0][4] } - episode = m[0][4] - } else if m[0][5] != "" && m[0][6] != "" { - season = m[0][5] - episode = m[0][6] - } else if m[0][7] != "" { - season = "1" + } else if m[0][5] != "" { // E04 + episode = m[0][5] + } else if m[0][6] != "" && m[0][7] != "" { // 1x04, 01x04 + season = m[0][6] episode = m[0][7] + } else if m[0][8] != "" { // Part4, Part11, Part.4, Part.11 + episode = m[0][8] } ss, err := strconv.Atoi(season) if err != nil { diff --git a/parser/parser_test.go b/parser/parser_test.go index 3a98928..70b80d1 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -126,6 +126,20 @@ func TestShow(t *testing.T) { Season: 1, Episode: 4, }}, + {"Adventure.Time.With.Finn.And.Jake.S01.SUBPACK.720p.BluRay.x264-DEiMOS", + Media{ + Release: "Adventure.Time.With.Finn.And.Jake.S01.SUBPACK.720p.BluRay.x264-DEiMOS", + Name: "Adventure.Time.With.Finn.And.Jake", + Season: 1, + Episode: 0, + }}, + {"Orange.Is.The.New.Black.S02.NORDiC.SUBPACK.BluRay-REQ", + Media{ + Release: "Orange.Is.The.New.Black.S02.NORDiC.SUBPACK.BluRay-REQ", + Name: "Orange.Is.The.New.Black", + Season: 2, + Episode: 0, + }}, } for _, tt := range tests { got, err := Show(tt.in) |