New: Added support for UltraHD (2160p) quality

This commit is contained in:
Björn Dahlgren 2015-11-10 00:18:02 +01:00 committed by Taloth Saldono
parent bdb1076100
commit 94323f79e7
7 changed files with 93 additions and 14 deletions

View File

@ -18,10 +18,13 @@ namespace NzbDrone.Core.Test.ParserTests
new object[] { Quality.WEBDL480p }, new object[] { Quality.WEBDL480p },
new object[] { Quality.HDTV720p }, new object[] { Quality.HDTV720p },
new object[] { Quality.HDTV1080p }, new object[] { Quality.HDTV1080p },
new object[] { Quality.HDTV2160p },
new object[] { Quality.WEBDL720p }, new object[] { Quality.WEBDL720p },
new object[] { Quality.WEBDL1080p }, new object[] { Quality.WEBDL1080p },
new object[] { Quality.WEBDL2160p },
new object[] { Quality.Bluray720p }, new object[] { Quality.Bluray720p },
new object[] { Quality.Bluray1080p } new object[] { Quality.Bluray1080p },
new object[] { Quality.Bluray2160p },
}; };
public static object[] OtherSourceQualityParserCases = public static object[] OtherSourceQualityParserCases =
@ -31,10 +34,13 @@ namespace NzbDrone.Core.Test.ParserTests
new object[] { "480p WEB-DL", Quality.WEBDL480p }, new object[] { "480p WEB-DL", Quality.WEBDL480p },
new object[] { "HD TV", Quality.HDTV720p }, new object[] { "HD TV", Quality.HDTV720p },
new object[] { "1080p HD TV", Quality.HDTV1080p }, new object[] { "1080p HD TV", Quality.HDTV1080p },
new object[] { "2160p HD TV", Quality.HDTV2160p },
new object[] { "720p WEB-DL", Quality.WEBDL720p }, new object[] { "720p WEB-DL", Quality.WEBDL720p },
new object[] { "1080p WEB-DL", Quality.WEBDL1080p }, new object[] { "1080p WEB-DL", Quality.WEBDL1080p },
new object[] { "2160p WEB-DL", Quality.WEBDL2160p },
new object[] { "720p BluRay", Quality.Bluray720p }, new object[] { "720p BluRay", Quality.Bluray720p },
new object[] { "1080p BluRay", Quality.Bluray1080p } new object[] { "1080p BluRay", Quality.Bluray1080p },
new object[] { "2160p BluRay", Quality.Bluray2160p },
}; };
[TestCase("S07E23 .avi ", false)] [TestCase("S07E23 .avi ", false)]
@ -157,6 +163,15 @@ namespace NzbDrone.Core.Test.ParserTests
ParseAndVerifyQuality(title, Quality.WEBDL1080p, proper); ParseAndVerifyQuality(title, Quality.WEBDL1080p, proper);
} }
[TestCase("CASANOVA S01E01.2160P AMZN WEBRIP DD2.0 HI10P X264-TROLLUHD", false)]
[TestCase("JUST ADD MAGIC S01E01.2160P AMZN WEBRIP DD2.0 X264-TROLLUHD", false)]
[TestCase("The.Man.In.The.High.Castle.S01E01.2160p.AMZN.WEBRip.DD2.0.Hi10p.X264-TrollUHD", false)]
[TestCase("The Man In the High Castle S01E01 2160p AMZN WEBRip DD2.0 Hi10P x264-TrollUHD", false)]
public void should_parse_webdl2160p_quality(string title, bool proper)
{
ParseAndVerifyQuality(title, Quality.WEBDL2160p, proper);
}
[TestCase("WEEDS.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", false)] [TestCase("WEEDS.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", false)]
[TestCase("Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", false)] [TestCase("Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", false)]
[TestCase("The Big Bang Theory.S03E01.The Electric Can Opener Fluctuation.m2ts", false)] [TestCase("The Big Bang Theory.S03E01.The Electric Can Opener Fluctuation.m2ts", false)]

View File

@ -19,7 +19,7 @@ namespace NzbDrone.Core.Test.Profiles
Subject.Handle(new ApplicationStartedEvent()); Subject.Handle(new ApplicationStartedEvent());
Mocker.GetMock<IProfileRepository>() Mocker.GetMock<IProfileRepository>()
.Verify(v => v.Insert(It.IsAny<Profile>()), Times.Exactly(5)); .Verify(v => v.Insert(It.IsAny<Profile>()), Times.Exactly(6));
} }
[Test] [Test]

View File

@ -13,22 +13,38 @@ namespace NzbDrone.Core.Test.Qualities
{ {
public static object[] FromIntCases = public static object[] FromIntCases =
{ {
new object[] {0, Quality.Unknown},
new object[] {1, Quality.SDTV}, new object[] {1, Quality.SDTV},
new object[] {2, Quality.DVD}, new object[] {2, Quality.DVD},
new object[] {3, Quality.WEBDL1080p},
new object[] {4, Quality.HDTV720p}, new object[] {4, Quality.HDTV720p},
new object[] {5, Quality.WEBDL720p}, new object[] {5, Quality.WEBDL720p},
new object[] {6, Quality.Bluray720p}, new object[] {6, Quality.Bluray720p},
new object[] {7, Quality.Bluray1080p} new object[] {7, Quality.Bluray1080p},
new object[] {8, Quality.WEBDL480p},
new object[] {9, Quality.HDTV1080p},
new object[] {10, Quality.RAWHD},
new object[] {12, Quality.HDTV2160p},
new object[] {13, Quality.WEBDL2160p},
new object[] {14, Quality.Bluray2160p},
}; };
public static object[] ToIntCases = public static object[] ToIntCases =
{ {
new object[] {Quality.Unknown, 0},
new object[] {Quality.SDTV, 1}, new object[] {Quality.SDTV, 1},
new object[] {Quality.DVD, 2}, new object[] {Quality.DVD, 2},
new object[] {Quality.WEBDL1080p, 3},
new object[] {Quality.HDTV720p, 4}, new object[] {Quality.HDTV720p, 4},
new object[] {Quality.WEBDL720p, 5}, new object[] {Quality.WEBDL720p, 5},
new object[] {Quality.Bluray720p, 6}, new object[] {Quality.Bluray720p, 6},
new object[] {Quality.Bluray1080p, 7} new object[] {Quality.Bluray1080p, 7},
new object[] {Quality.WEBDL480p, 8},
new object[] {Quality.HDTV1080p, 9},
new object[] {Quality.RAWHD, 10},
new object[] {Quality.HDTV2160p, 12},
new object[] {Quality.WEBDL2160p, 13},
new object[] {Quality.Bluray2160p, 14},
}; };
[Test, TestCaseSource("FromIntCases")] [Test, TestCaseSource("FromIntCases")]
@ -49,16 +65,20 @@ namespace NzbDrone.Core.Test.Qualities
{ {
var qualities = new List<Quality> var qualities = new List<Quality>
{ {
Quality.Unknown,
Quality.SDTV, Quality.SDTV,
Quality.WEBDL480p, Quality.WEBDL480p,
Quality.DVD, Quality.DVD,
Quality.HDTV720p, Quality.HDTV720p,
Quality.HDTV1080p, Quality.HDTV1080p,
Quality.HDTV2160p,
Quality.RAWHD, Quality.RAWHD,
Quality.WEBDL720p, Quality.WEBDL720p,
Quality.Bluray720p,
Quality.WEBDL1080p, Quality.WEBDL1080p,
Quality.Bluray1080p Quality.WEBDL2160p,
Quality.Bluray720p,
Quality.Bluray1080p,
Quality.Bluray2160p,
}; };
if (allowed.Length == 0) if (allowed.Length == 0)

View File

@ -222,7 +222,7 @@ namespace NzbDrone.Core.Parser
private static readonly Regex CleanTorrentSuffixRegex = new Regex(@"\[(?:ettv|rartv|rarbg|cttv)\]$", private static readonly Regex CleanTorrentSuffixRegex = new Regex(@"\[(?:ettv|rartv|rarbg|cttv)\]$",
RegexOptions.IgnoreCase | RegexOptions.Compiled); RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex ReleaseGroupRegex = new Regex(@"-(?<releasegroup>[a-z0-9]+)\b(?<!WEB-DL|480p|720p|1080p)", private static readonly Regex ReleaseGroupRegex = new Regex(@"-(?<releasegroup>[a-z0-9]+)\b(?<!WEB-DL|480p|720p|1080p|2160p)",
RegexOptions.IgnoreCase | RegexOptions.Compiled); RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex AnimeReleaseGroupRegex = new Regex(@"^(?:\[(?<subgroup>(?!\s).+?(?<!\s))\](?:_|-|\s|\.)?)", private static readonly Regex AnimeReleaseGroupRegex = new Regex(@"^(?:\[(?<subgroup>(?!\s).+?(?<!\s))\](?:_|-|\s|\.)?)",

View File

@ -38,7 +38,7 @@ namespace NzbDrone.Core.Parser
private static readonly Regex RealRegex = new Regex(@"\b(?<real>REAL)\b", private static readonly Regex RealRegex = new Regex(@"\b(?<real>REAL)\b",
RegexOptions.Compiled); RegexOptions.Compiled);
private static readonly Regex ResolutionRegex = new Regex(@"\b(?:(?<_480p>480p|640x480|848x480)|(?<_576p>576p)|(?<_720p>720p|1280x720)|(?<_1080p>1080p|1920x1080))\b", private static readonly Regex ResolutionRegex = new Regex(@"\b(?:(?<_480p>480p|640x480|848x480)|(?<_576p>576p)|(?<_720p>720p|1280x720)|(?<_1080p>1080p|1920x1080)|(?<_2160p>2160p))\b",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex CodecRegex = new Regex(@"\b(?:(?<x264>x264)|(?<h264>h264)|(?<xvidhd>XvidHD)|(?<xvid>Xvid)|(?<divx>divx))\b", private static readonly Regex CodecRegex = new Regex(@"\b(?:(?<x264>x264)|(?<h264>h264)|(?<xvidhd>XvidHD)|(?<xvid>Xvid)|(?<divx>divx))\b",
@ -76,6 +76,12 @@ namespace NzbDrone.Core.Parser
return result; return result;
} }
if (resolution == Resolution._2160p)
{
result.Quality = Quality.Bluray2160p;
return result;
}
if (resolution == Resolution._1080p) if (resolution == Resolution._1080p)
{ {
result.Quality = Quality.Bluray1080p; result.Quality = Quality.Bluray1080p;
@ -94,6 +100,12 @@ namespace NzbDrone.Core.Parser
if (sourceMatch.Groups["webdl"].Success) if (sourceMatch.Groups["webdl"].Success)
{ {
if (resolution == Resolution._2160p)
{
result.Quality = Quality.WEBDL2160p;
return result;
}
if (resolution == Resolution._1080p) if (resolution == Resolution._1080p)
{ {
result.Quality = Quality.WEBDL1080p; result.Quality = Quality.WEBDL1080p;
@ -118,6 +130,12 @@ namespace NzbDrone.Core.Parser
if (sourceMatch.Groups["hdtv"].Success) if (sourceMatch.Groups["hdtv"].Success)
{ {
if (resolution == Resolution._2160p)
{
result.Quality = Quality.HDTV2160p;
return result;
}
if (resolution == Resolution._1080p) if (resolution == Resolution._1080p)
{ {
result.Quality = Quality.HDTV1080p; result.Quality = Quality.HDTV1080p;
@ -198,6 +216,12 @@ namespace NzbDrone.Core.Parser
return result; return result;
} }
if (resolution == Resolution._2160p)
{
result.Quality = Quality.HDTV2160p;
return result;
}
if (resolution == Resolution._1080p) if (resolution == Resolution._1080p)
{ {
result.Quality = Quality.HDTV1080p; result.Quality = Quality.HDTV1080p;
@ -296,6 +320,7 @@ namespace NzbDrone.Core.Parser
if (match.Groups["_576p"].Success) return Resolution._576p; if (match.Groups["_576p"].Success) return Resolution._576p;
if (match.Groups["_720p"].Success) return Resolution._720p; if (match.Groups["_720p"].Success) return Resolution._720p;
if (match.Groups["_1080p"].Success) return Resolution._1080p; if (match.Groups["_1080p"].Success) return Resolution._1080p;
if (match.Groups["_2160p"].Success) return Resolution._2160p;
return Resolution.Unknown; return Resolution.Unknown;
} }
@ -346,6 +371,7 @@ namespace NzbDrone.Core.Parser
_576p, _576p,
_720p, _720p,
_1080p, _1080p,
_2160p,
Unknown Unknown
} }
} }

View File

@ -94,7 +94,8 @@ namespace NzbDrone.Core.Profiles
Quality.WEBDL720p, Quality.WEBDL720p,
Quality.WEBDL1080p, Quality.WEBDL1080p,
Quality.Bluray720p, Quality.Bluray720p,
Quality.Bluray1080p); Quality.Bluray1080p,
Quality.WEBDL2160p);
AddDefaultProfile("SD", Quality.SDTV, AddDefaultProfile("SD", Quality.SDTV,
Quality.SDTV, Quality.SDTV,
@ -111,13 +112,21 @@ namespace NzbDrone.Core.Profiles
Quality.WEBDL1080p, Quality.WEBDL1080p,
Quality.Bluray1080p); Quality.Bluray1080p);
AddDefaultProfile("HD-2160p", Quality.HDTV2160p,
Quality.HDTV2160p,
Quality.WEBDL2160p,
Quality.Bluray2160p);
AddDefaultProfile("HD - All", Quality.HDTV720p, AddDefaultProfile("HD - All", Quality.HDTV720p,
Quality.HDTV720p, Quality.HDTV720p,
Quality.HDTV1080p, Quality.HDTV1080p,
Quality.HDTV2160p,
Quality.WEBDL720p, Quality.WEBDL720p,
Quality.WEBDL1080p, Quality.WEBDL1080p,
Quality.WEBDL2160p,
Quality.Bluray720p, Quality.Bluray720p,
Quality.Bluray1080p); Quality.Bluray1080p,
Quality.Bluray2160p);
} }
} }
} }

View File

@ -67,6 +67,9 @@ namespace NzbDrone.Core.Qualities
public static Quality HDTV1080p { get { return new Quality(9, "HDTV-1080p"); } } public static Quality HDTV1080p { get { return new Quality(9, "HDTV-1080p"); } }
public static Quality RAWHD { get { return new Quality(10, "Raw-HD"); } } public static Quality RAWHD { get { return new Quality(10, "Raw-HD"); } }
//public static Quality HDTV480p { get { return new Quality(11, "HDTV-480p"); } } //public static Quality HDTV480p { get { return new Quality(11, "HDTV-480p"); } }
public static Quality HDTV2160p { get { return new Quality(12, "HDTV-2160p"); } }
public static Quality WEBDL2160p { get { return new Quality(13, "WEBDL-2160p"); } }
public static Quality Bluray2160p { get { return new Quality(14, "Bluray-2160p"); } }
public static List<Quality> All public static List<Quality> All
{ {
@ -84,7 +87,10 @@ namespace NzbDrone.Core.Qualities
Bluray1080p, Bluray1080p,
WEBDL480p, WEBDL480p,
HDTV1080p, HDTV1080p,
RAWHD RAWHD,
HDTV2160p,
WEBDL2160p,
Bluray2160p,
}; };
} }
} }
@ -105,7 +111,10 @@ namespace NzbDrone.Core.Qualities
new QualityDefinition(Quality.WEBDL720p) { Weight = 8, MinSize = 0, MaxSize = 100 }, new QualityDefinition(Quality.WEBDL720p) { Weight = 8, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.Bluray720p) { Weight = 9, MinSize = 0, MaxSize = 100 }, new QualityDefinition(Quality.Bluray720p) { Weight = 9, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.WEBDL1080p) { Weight = 10, MinSize = 0, MaxSize = 100 }, new QualityDefinition(Quality.WEBDL1080p) { Weight = 10, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.Bluray1080p) { Weight = 11, MinSize = 0, MaxSize = 100 } new QualityDefinition(Quality.Bluray1080p) { Weight = 11, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.HDTV2160p) { Weight = 12, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.WEBDL2160p) { Weight = 13, MinSize = 0, MaxSize = 100 },
new QualityDefinition(Quality.Bluray2160p) { Weight = 14, MinSize = 0, MaxSize = 100 },
}; };
} }
} }