diff --git a/NzbDrone.Core.Test/ParserFixture/ParserTest.cs b/NzbDrone.Core.Test/ParserFixture/ParserTest.cs index b7cdfbebc..bcf9c54ed 100644 --- a/NzbDrone.Core.Test/ParserFixture/ParserTest.cs +++ b/NzbDrone.Core.Test/ParserFixture/ParserTest.cs @@ -319,6 +319,9 @@ namespace NzbDrone.Core.Test.ParserFixture [TestCase("Castle.2009.S01E14.Turkish.HDTV.XviD-LOL", LanguageType.Turkish)] [TestCase("Castle.2009.S01E14.Portuguese.HDTV.XviD-LOL", LanguageType.Portuguese)] [TestCase("Castle.2009.S01E14.HDTV.XviD-LOL", LanguageType.English)] + [TestCase("person.of.interest.1x19.ita.720p.bdmux.x264-novarip", LanguageType.Italian)] + [TestCase("Salamander.S01E01.FLEMISH.HDTV.x264-BRiGAND", LanguageType.Flemish)] + [TestCase("H.Polukatoikia.S03E13.Greek.PDTV.XviD-Ouzo", LanguageType.Greek)] public void parse_language(string postTitle, LanguageType language) { var result = Parser.ParseLanguage(postTitle); diff --git a/NzbDrone.Core/Model/LanguageType.cs b/NzbDrone.Core/Model/LanguageType.cs index 2bdab3ae8..de11ee25e 100644 --- a/NzbDrone.Core/Model/LanguageType.cs +++ b/NzbDrone.Core/Model/LanguageType.cs @@ -20,6 +20,8 @@ Norwegian = 15, Finnish = 16, Turkish = 17, - Portuguese = 18 + Portuguese = 18, + Flemish = 19, + Greek = 20 } } diff --git a/NzbDrone.Core/Parser.cs b/NzbDrone.Core/Parser.cs index b39abbeff..f1b6b23ef 100644 --- a/NzbDrone.Core/Parser.cs +++ b/NzbDrone.Core/Parser.cs @@ -1,4 +1,4 @@ -using System; + using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -85,6 +85,8 @@ namespace NzbDrone.Core private static readonly Regex MultiPartCleanupRegex = new Regex(@"\(\d+\)$", RegexOptions.Compiled); + private static readonly Regex LanguageRegex = new Regex(@"(?:\W|_)(?ita|italian)|(?german\b)|(?flemish)|(?greek)(?:\W|_)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + internal static EpisodeParseResult ParsePath(string path) { var fileInfo = new FileInfo(path); @@ -388,16 +390,6 @@ namespace NzbDrone.Core if (lowerTitle.Contains("spanish")) return LanguageType.Spanish; - if (lowerTitle.Contains("german")) - { - //Make sure it doesn't contain Germany (Since we're not using REGEX for all this) - if (!lowerTitle.Contains("germany")) - return LanguageType.German; - } - - if (lowerTitle.Contains("italian")) - return LanguageType.Italian; - if (lowerTitle.Contains("danish")) return LanguageType.Danish; @@ -440,6 +432,20 @@ namespace NzbDrone.Core if (lowerTitle.Contains("portuguese")) return LanguageType.Portuguese; + var match = LanguageRegex.Match(title); + + if (match.Groups["italian"].Captures.Cast().Any()) + return LanguageType.Italian; + + if (match.Groups["german"].Captures.Cast().Any()) + return LanguageType.German; + + if (match.Groups["flemish"].Captures.Cast().Any()) + return LanguageType.Flemish; + + if (match.Groups["greek"].Captures.Cast().Any()) + return LanguageType.Greek; + return LanguageType.English; }