diff --git a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs index 130dc6647..9b6314158 100644 --- a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs @@ -52,6 +52,12 @@ namespace NzbDrone.Core.Test.ParserTests title.CleanSeriesTitle().Should().Be("carnivale"); } + [TestCase("Discovery TV - Gold Rush : 02 Road From Hell [S04].mp4")] + public void should_clean_up_invalid_path_characters(String postTitle) + { + Parser.Parser.ParseTitle(postTitle); + } + [TestCase("[scnzbefnet][509103] 2.Broke.Girls.S03E18.720p.HDTV.X264-DIMENSION", "2 Broke Girls")] public void should_remove_request_info_from_title(String postTitle, String title) { diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 8899e1977..13a5a468e 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -138,6 +138,9 @@ namespace NzbDrone.Core.Parser private static readonly Regex NormalizeRegex = new Regex(@"((?:\b|_)(?|\?|\*|\:|\||848x480|1280x720|1920x1080|8bit|10bit", RegexOptions.IgnoreCase | RegexOptions.Compiled); @@ -371,14 +374,18 @@ namespace NzbDrone.Core.Parser public static string RemoveFileExtension(string title) { - if (!title.ContainsInvalidPathChars()) - { - var extension = Path.GetExtension(title).ToLower(); - if (MediaFiles.MediaFileExtensions.Extensions.Contains(extension) || new [] { ".par2", ".nzb" }.Contains(extension)) + title = FileExtensionRegex.Replace(title, m => { - title = Path.Combine(Path.GetDirectoryName(title), Path.GetFileNameWithoutExtension(title)); - } - } + var extension = m.Value.ToLower(); + if (MediaFiles.MediaFileExtensions.Extensions.Contains(extension) || new[] { ".par2", ".nzb" }.Contains(extension)) + { + return String.Empty; + } + else + { + return m.Value; + } + }); return title; }