diff --git a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs index 1bed671ae..21c7e1e4c 100644 --- a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs @@ -247,6 +247,15 @@ namespace NzbDrone.Core.Test.ParserTests result.Language.Id.Should().Be(Language.Hindi.Id); } + [TestCase("Title.the.Series.2009.S01E14.Bulgarian.HDTV.XviD-LOL")] + [TestCase("Title.the.Series.2009.S01E14.BGAUDIO.HDTV.XviD-LOL")] + [TestCase("Title.the.Series.2009.S01E14.BG.AUDIO.HDTV.XviD-LOL")] + public void should_parse_language_bulgarian(string postTitle) + { + var result = Parser.Parser.ParseTitle(postTitle); + result.Language.Id.Should().Be(Language.Bulgarian.Id); + } + [TestCase("Title.the.Russian.Series.S01E07.Cold.Action.HDTV.XviD-Droned")] [TestCase("Title.the.Russian.Series.S01E07E08.Cold.Action.HDTV.XviD-Droned")] [TestCase("Title.the.Russian.Series.S01.1080p.WEBRip.DDP5.1.x264-Drone")] diff --git a/src/NzbDrone.Core/Languages/Language.cs b/src/NzbDrone.Core/Languages/Language.cs index 92ac0ec29..185d89f14 100644 --- a/src/NzbDrone.Core/Languages/Language.cs +++ b/src/NzbDrone.Core/Languages/Language.cs @@ -83,6 +83,7 @@ namespace NzbDrone.Core.Languages public static Language Czech { get { return new Language(25, "Czech"); } } public static Language Arabic { get { return new Language(26, "Arabic"); } } public static Language Hindi { get { return new Language(27, "Hindi"); } } + public static Language Bulgarian { get { return new Language(28, "Bulgarian"); } } public static List All @@ -118,7 +119,8 @@ namespace NzbDrone.Core.Languages Lithuanian, Czech, Arabic, - Hindi + Hindi, + Bulgarian }; } } @@ -159,4 +161,4 @@ namespace NzbDrone.Core.Languages return language; } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core/Parser/IsoLanguages.cs b/src/NzbDrone.Core/Parser/IsoLanguages.cs index 661a931c4..e70a723c5 100644 --- a/src/NzbDrone.Core/Parser/IsoLanguages.cs +++ b/src/NzbDrone.Core/Parser/IsoLanguages.cs @@ -35,7 +35,8 @@ namespace NzbDrone.Core.Parser new IsoLanguage("lt", "lit", Language.Lithuanian), new IsoLanguage("cs", "ces", Language.Czech), new IsoLanguage("ar", "ara", Language.Arabic), - new IsoLanguage("hi", "hin", Language.Hindi) + new IsoLanguage("hi", "hin", Language.Hindi), + new IsoLanguage("bg", "bul", Language.Bulgarian) }; public static IsoLanguage Find(string isoCode) diff --git a/src/NzbDrone.Core/Parser/LanguageParser.cs b/src/NzbDrone.Core/Parser/LanguageParser.cs index 3c4cab389..641f76ae2 100644 --- a/src/NzbDrone.Core/Parser/LanguageParser.cs +++ b/src/NzbDrone.Core/Parser/LanguageParser.cs @@ -17,10 +17,10 @@ namespace NzbDrone.Core.Parser new RegexReplace(@".*?[_. ](S\d{2}(?:E\d{2,4})*[_. ].*)", "$1", RegexOptions.Compiled | RegexOptions.IgnoreCase) }; - private static readonly Regex LanguageRegex = new Regex(@"(?:\W|_)(?\b(?:ita|italian)\b)|(?german\b|videomann)|(?flemish)|(?greek)|(?(?:\W|_)(?:FR)(?:\W|_))|(?\brus\b)|(?\b(?:HUNDUB|HUN)\b)|(?\bHebDub\b)|(?\b(?:PL\W?DUB|DUB\W?PL|LEK\W?PL|PL\W?LEK)\b)|(?\[(?:CH[ST]|BIG5|GB)\]|简|繁|字幕)", + private static readonly Regex LanguageRegex = new Regex(@"(?:\W|_)(?\b(?:ita|italian)\b)|(?german\b|videomann)|(?flemish)|(?greek)|(?(?:\W|_)(?:FR)(?:\W|_))|(?\brus\b)|(?\b(?:HUNDUB|HUN)\b)|(?\bHebDub\b)|(?\b(?:PL\W?DUB|DUB\W?PL|LEK\W?PL|PL\W?LEK)\b)|(?\[(?:CH[ST]|BIG5|GB)\]|简|繁|字幕)|(?\bbgaudio\b)", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex CaseSensitiveLanguageRegex = new Regex(@"(?\bLT\b)|(?\bCZ\b)|(?\bPL\b)", + private static readonly Regex CaseSensitiveLanguageRegex = new Regex(@"(?:(?i)(?\bLT\b)|(?\bCZ\b)|(?\bPL\b)|(?\bBG\b))(?:(?i)(?![\W|_|^]SUB))", RegexOptions.Compiled); @@ -96,6 +96,9 @@ namespace NzbDrone.Core.Parser if (lowerTitle.Contains("hindi")) return Language.Hindi; + if (lowerTitle.Contains("bulgarian")) + return Language.Bulgarian; + var regexLanguage = RegexLanguage(title); if (regexLanguage != Language.Unknown) @@ -158,6 +161,9 @@ namespace NzbDrone.Core.Parser if (caseSensitiveMatch.Groups["polish"].Captures.Cast().Any()) return Language.Polish; + if (caseSensitiveMatch.Groups["bulgarian"].Captures.Cast().Any()) + return Language.Bulgarian; + // Case insensitive var match = LanguageRegex.Match(title); @@ -194,6 +200,9 @@ namespace NzbDrone.Core.Parser if (match.Groups["chinese"].Success) return Language.Chinese; + if (match.Groups["bulgarian"].Success) + return Language.Bulgarian; + return Language.Unknown; } }