Fixed: Enable parsing of repacks with revision

Closes #8060

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
pull/8424/head
Qstick 2 years ago
parent a0068a3ed9
commit b44f050246

@ -453,14 +453,16 @@ namespace NzbDrone.Core.Test.ParserTests
result.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name); result.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
} }
[TestCase("Movie Title 2018 REPACK 720p x264 aAF", true)] [TestCase("Movie Title 2018 REPACK 720p HDTV x264 aAF", true, 2)]
[TestCase("Movie.Title.2018.REPACK.720p.x264-aAF", true)] [TestCase("Movie.Title.2018.REPACK.720p.HDTV.x264-aAF", true, 2)]
[TestCase("Movie.Title.2018.PROPER.720p.x264-aAF", false)] [TestCase("Movie.Title.2018.REPACK2.720p.HDTV.x264-aAF", true, 3)]
[TestCase("Movie.Title.2018.RERIP.720p.BluRay.x264-DEMAND", true)] [TestCase("Movie.Title.2018.PROPER.720p.HDTV.x264-aAF", false, 2)]
public void should_be_able_to_parse_repack(string title, bool isRepack) [TestCase("Movie.Title.2018.RERIP.720p.BluRay.x264-DEMAND", true, 2)]
[TestCase("Movie.Title.2018.RERIP2.720p.BluRay.x264-DEMAND", true, 3)]
public void should_be_able_to_parse_repack(string title, bool isRepack, int version)
{ {
var result = QualityParser.ParseQuality(title); var result = QualityParser.ParseQuality(title);
result.Revision.Version.Should().Be(2); result.Revision.Version.Should().Be(version);
result.Revision.IsRepack.Should().Be(isRepack); result.Revision.IsRepack.Should().Be(isRepack);
} }

@ -47,10 +47,10 @@ namespace NzbDrone.Core.Parser
private static readonly Regex ProperRegex = new (@"\b(?<proper>proper)\b", private static readonly Regex ProperRegex = new (@"\b(?<proper>proper)\b",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex RepackRegex = new (@"\b(?<repack>repack|rerip)\b", private static readonly Regex RepackRegex = new (@"\b(?<repack>repack\d?|rerip\d?)\b",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex VersionRegex = new (@"\d[-._ ]?v(?<version>\d)[-._ ]|\[v(?<version>\d)\]", private static readonly Regex VersionRegex = new (@"\d[-._ ]?v(?<version>\d)[-._ ]|\[v(?<version>\d)\]|repack(?<version>\d)|rerip(?<version>\d)",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex RealRegex = new (@"\b(?<real>REAL)\b", private static readonly Regex RealRegex = new (@"\b(?<real>REAL)\b",
@ -706,24 +706,24 @@ namespace NzbDrone.Core.Parser
{ {
var result = new QualityModel { Quality = Quality.Unknown }; var result = new QualityModel { Quality = Quality.Unknown };
if (ProperRegex.IsMatch(normalizedName)) var versionRegexResult = VersionRegex.Match(normalizedName);
if (versionRegexResult.Success)
{ {
result.Revision.Version = 2; result.Revision.Version = Convert.ToInt32(versionRegexResult.Groups["version"].Value);
result.RevisionDetectionSource = QualityDetectionSource.Name; result.RevisionDetectionSource = QualityDetectionSource.Name;
} }
if (RepackRegex.IsMatch(normalizedName)) if (ProperRegex.IsMatch(normalizedName))
{ {
result.Revision.Version = 2; result.Revision.Version = versionRegexResult.Success ? Convert.ToInt32(versionRegexResult.Groups["version"].Value) + 1 : 2;
result.Revision.IsRepack = true;
result.RevisionDetectionSource = QualityDetectionSource.Name; result.RevisionDetectionSource = QualityDetectionSource.Name;
} }
var versionRegexResult = VersionRegex.Match(normalizedName); if (RepackRegex.IsMatch(normalizedName))
if (versionRegexResult.Success)
{ {
result.Revision.Version = Convert.ToInt32(versionRegexResult.Groups["version"].Value); result.Revision.Version = versionRegexResult.Success ? Convert.ToInt32(versionRegexResult.Groups["version"].Value) + 1 : 2;
result.Revision.IsRepack = true;
result.RevisionDetectionSource = QualityDetectionSource.Name; result.RevisionDetectionSource = QualityDetectionSource.Name;
} }

Loading…
Cancel
Save