From 6dd8df43caab954494e5dfc8314629aab27143ef Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 6 Jul 2019 18:22:12 -0400 Subject: [PATCH] Fixed: Incorrect parsing of APE and OPUS in some cases Fixes #847 --- .../ParserTests/QualityParserFixture.cs | 24 ++++++++++++------- src/NzbDrone.Core/Parser/QualityParser.cs | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs index f09a846d3..4a915a7f3 100644 --- a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs @@ -153,16 +153,9 @@ namespace NzbDrone.Core.Test.ParserTests ParseAndVerifyQuality(title, desc, bitrate, Quality.APE); } - [TestCase("Max Roach - Drums Unlimited (1966) [WavPack]", null, 0)] - [TestCase("Roxette - Charm School(2011) (2CD) [WV]", null, 0)] - [TestCase("", "WavPack", 0)] - public void should_parse_wavpack_quality(string title, string desc, int bitrate) - { - ParseAndVerifyQuality(title, desc, bitrate, Quality.WAVPACK); - } - [TestCase("Arctic Monkeys - AM {2013-Album}", null, 0)] [TestCase("Audio Adrinaline - Audio Adrinaline", null, 0)] + [TestCase("Audio Adrinaline - Audio Adrinaline [Mixtape FLAC]", null, 0)] [TestCase("Brain Ape - Rig it [2014][flac]", null, 0)] [TestCase("Coil - The Ape Of Naples(2005) (FLAC)", null, 0)] public void should_not_parse_ape_quality(string title, string desc, int bitrate) @@ -171,6 +164,21 @@ namespace NzbDrone.Core.Test.ParserTests result.Quality.Should().NotBe(Quality.APE); } + [TestCase("Opus - Drums Unlimited (1966) [Flac]", null, 0)] + public void should_not_parse_opus_quality(string title, string desc, int bitrate) + { + var result = QualityParser.ParseQuality(title, desc, bitrate); + result.Quality.Should().Be(Quality.FLAC); + } + + [TestCase("Max Roach - Drums Unlimited (1966) [WavPack]", null, 0)] + [TestCase("Roxette - Charm School(2011) (2CD) [WV]", null, 0)] + [TestCase("", "WavPack", 0)] + public void should_parse_wavpack_quality(string title, string desc, int bitrate) + { + ParseAndVerifyQuality(title, desc, bitrate, Quality.WAVPACK); + } + [TestCase("Milky Chance - Sadnecessary [256 Kbps] [M4A]", null, 0)] [TestCase("Little Mix - Salute [Deluxe Edition] [2013] [M4A-256]-V3nom [GLT", null, 0)] [TestCase("X-Men Soundtracks (2006-2014) AAC, 256 kbps", null, 0)] diff --git a/src/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs index b8ecc96e7..c165b472b 100644 --- a/src/NzbDrone.Core/Parser/QualityParser.cs +++ b/src/NzbDrone.Core/Parser/QualityParser.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Parser private static readonly Regex SampleSizeRegex = new Regex(@"\b(?:(?24[ ]bit|24bit|[\[\(].*24bit.*[\]\)]))"); - private static readonly Regex CodecRegex = new Regex(@"\b(?:(?MPEG Version \d(.5)? Audio, Layer 1|MP1)|(?MPEG Version \d(.5)? Audio, Layer 2|MP2)|(?MP3.*VBR|MPEG Version \d(.5)? Audio, Layer 3 vbr)|(?MP3|MPEG Version \d(.5)? Audio, Layer 3)|(?flac)|(?wavpack|wv)|(?alac)|(?WMA\d?)|(?WAV|PCM)|(?M4A|M4P|M4B|AAC|mp4a|MPEG-4 Audio(?!.*alac))|(?OGG|OGA|Vorbis))\b|(?monkey's audio|[\[|\(].*ape.*[\]|\)])|(?Opus)", + private static readonly Regex CodecRegex = new Regex(@"\b(?:(?MPEG Version \d(.5)? Audio, Layer 1|MP1)|(?MPEG Version \d(.5)? Audio, Layer 2|MP2)|(?MP3.*VBR|MPEG Version \d(.5)? Audio, Layer 3 vbr)|(?MP3|MPEG Version \d(.5)? Audio, Layer 3)|(?flac)|(?wavpack|wv)|(?alac)|(?WMA\d?)|(?WAV|PCM)|(?M4A|M4P|M4B|AAC|mp4a|MPEG-4 Audio(?!.*alac))|(?OGG|OGA|Vorbis))\b|(?monkey's audio|[\[|\(].*\bape\b.*[\]|\)])|(?Opus Version \d(.5)? Audio|[\[|\(].*\bopus\b.*[\]|\)])", RegexOptions.Compiled | RegexOptions.IgnoreCase); public static QualityModel ParseQuality(string name, string desc, int fileBitrate, int fileSampleSize = 0)