diff --git a/media/movie_test.go b/media/movie_test.go index 0240de4..e95933c 100644 --- a/media/movie_test.go +++ b/media/movie_test.go @@ -104,6 +104,13 @@ func TestForeignMovie(t *testing.T) { assert.Equal(t, 2003, m.Year()) } +func TestMovieWebsite(t *testing.T) { + m, err := NewMovie("[www.example.com] Inception (2010) x264 1080p") + require.NoError(t, err) + assert.Equal(t, "Inception", m.MovieName()) + assert.Equal(t, 2010, m.Year()) +} + func TestMovieJSON(t *testing.T) { m, err := NewMovie("Inception.2010.720p") require.NoError(t, err) diff --git a/parse/parse.go b/parse/parse.go index 13a73a9..cb00952 100644 --- a/parse/parse.go +++ b/parse/parse.go @@ -84,9 +84,12 @@ func isAbbreviation(str string) bool { var abbreviationRegexp = regexp.MustCompile(`\b[A-Za-z]([\s\.][A-Za-z])+\b`) var illegalcharsRegexp = regexp.MustCompile(`[^\p{L}0-9\s&'_\(\)\-,:]`) var spaceReplaceRegexp = regexp.MustCompile(`[\.\s_]+`) +var websiteRegexp = regexp.MustCompile(`((https?|ftp|smtp):\/\/)?(www.)[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*`) +var trimRegexp = regexp.MustCompile(`^[^\p{L}0-9]*(.+?[\.\)]?)[^\p{L}0-9]*$`) // CleanName returns the media name cleaned from punctuation func CleanName(name string) string { + name = websiteRegexp.ReplaceAllString(name, "") name = spaceReplaceRegexp.ReplaceAllString(name, " ") name = illegalcharsRegexp.ReplaceAllString(name, "") @@ -103,7 +106,13 @@ func CleanName(name string) string { name = Capitalize(name) - return strings.TrimSpace(name) + match := trimRegexp.FindStringSubmatch(name) + + if len(match) > 1 { + return match[1] + } else { + return "" + } } var illegalIdentity = regexp.MustCompile(`[^\p{L}0-9]`) diff --git a/parse/parse_test.go b/parse/parse_test.go index 2b6e750..13a652e 100644 --- a/parse/parse_test.go +++ b/parse/parse_test.go @@ -51,6 +51,11 @@ func TestCleanNameMovieTitles(t *testing.T) { } } +func TestCleanNameWebsites(t *testing.T) { + assert.Equal(t, "Inception", CleanName("www.example.com - Inception")) + assert.Equal(t, "Inception", CleanName("[www.example.com].Inception")) +} + func TestIdentity(t *testing.T) { assert.Equal(t, "thisisatest", Identity("thìs is â tést")) assert.Equal(t, "vyzkousejtetentoretezec", Identity("vyzkoušejte tento řetězec"))