From c60be3a46700346c510a8a18ad28fac0c40b46db Mon Sep 17 00:00:00 2001 From: Devin Buhl Date: Thu, 26 Jan 2017 14:43:24 -0500 Subject: [PATCH] Added new qualities, added new qualities to profile class. Left to do: write migration, and tests --- .../AcceptableSizeSpecificationFixture.cs | 20 ++-- .../ParserTests/QualityParserFixture.cs | 26 ++--- .../Qualities/QualityFixture.cs | 16 ++- .../EpisodesWhereCutoffUnmetFixture.cs | 10 +- .../PassThePopcorn/PassThePopcornSettings.cs | 3 + src/NzbDrone.Core/Parser/QualityParser.cs | 10 +- src/NzbDrone.Core/Profiles/ProfileService.cs | 37 ++++-- src/NzbDrone.Core/Qualities/Quality.cs | 105 ++++++++++++------ 8 files changed, 142 insertions(+), 85 deletions(-) diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs index 14cdef982..c91ba95fb 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs @@ -196,18 +196,18 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); } - [Test] - public void should_return_true_if_RAWHD() - { - parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.RAWHD); + //[Test] + //public void should_return_true_if_RAWHD() + //{ + // parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.RAWHD); - series.Runtime = 45; - parseResultSingle.Series = series; - parseResultSingle.Series.SeriesType = SeriesTypes.Daily; - parseResultSingle.Release.Size = 8000.Megabytes(); + // series.Runtime = 45; + // parseResultSingle.Series = series; + // parseResultSingle.Series.SeriesType = SeriesTypes.Daily; + // parseResultSingle.Release.Size = 8000.Megabytes(); - Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); - } + // Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); + //} [Test] public void should_return_true_for_special() diff --git a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs index 3eabec7e9..f4d38ae4f 100644 --- a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs @@ -215,19 +215,19 @@ namespace NzbDrone.Core.Test.ParserTests ParseAndVerifyQuality(title, Quality.Bluray1080p, proper); } - [TestCase("POI S02E11 1080i HDTV DD5.1 MPEG2-TrollHD", false)] - [TestCase("How I Met Your Mother S01E18 Nothing Good Happens After 2 A.M. 720p HDTV DD5.1 MPEG2-TrollHD", false)] - [TestCase("The Voice S01E11 The Finals 1080i HDTV DD5.1 MPEG2-TrollHD", false)] - [TestCase("Californication.S07E11.1080i.HDTV.DD5.1.MPEG2-NTb.ts", false)] - [TestCase("Game of Thrones S04E10 1080i HDTV MPEG2 DD5.1-CtrlHD.ts", false)] - [TestCase("VICE.S02E05.1080i.HDTV.DD2.0.MPEG2-NTb.ts", false)] - [TestCase("Show - S03E01 - Episode Title Raw-HD.ts", false)] - [TestCase("Saturday.Night.Live.Vintage.S10E09.Eddie.Murphy.The.Honeydrippers.1080i.UPSCALE.HDTV.DD5.1.MPEG2-zebra", false)] - [TestCase("The.Colbert.Report.2011-08-04.1080i.HDTV.MPEG-2-CtrlHD", false)] - public void should_parse_raw_quality(string title, bool proper) - { - ParseAndVerifyQuality(title, Quality.RAWHD, proper); - } + //[TestCase("POI S02E11 1080i HDTV DD5.1 MPEG2-TrollHD", false)] + //[TestCase("How I Met Your Mother S01E18 Nothing Good Happens After 2 A.M. 720p HDTV DD5.1 MPEG2-TrollHD", false)] + //[TestCase("The Voice S01E11 The Finals 1080i HDTV DD5.1 MPEG2-TrollHD", false)] + //[TestCase("Californication.S07E11.1080i.HDTV.DD5.1.MPEG2-NTb.ts", false)] + //[TestCase("Game of Thrones S04E10 1080i HDTV MPEG2 DD5.1-CtrlHD.ts", false)] + //[TestCase("VICE.S02E05.1080i.HDTV.DD2.0.MPEG2-NTb.ts", false)] + //[TestCase("Show - S03E01 - Episode Title Raw-HD.ts", false)] + //[TestCase("Saturday.Night.Live.Vintage.S10E09.Eddie.Murphy.The.Honeydrippers.1080i.UPSCALE.HDTV.DD5.1.MPEG2-zebra", false)] + //[TestCase("The.Colbert.Report.2011-08-04.1080i.HDTV.MPEG-2-CtrlHD", false)] + //public void should_parse_raw_quality(string title, bool proper) + //{ + // ParseAndVerifyQuality(title, Quality.RAWHD, proper); + //} [TestCase("Sonny.With.a.Chance.S02E15", false)] [TestCase("Law & Order: Special Victims Unit - 11x11 - Quickie", false)] diff --git a/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs index a9086a2bf..982916896 100644 --- a/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs +++ b/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs @@ -23,7 +23,7 @@ namespace NzbDrone.Core.Test.Qualities new object[] {7, Quality.Bluray1080p}, new object[] {8, Quality.WEBDL480p}, new object[] {9, Quality.HDTV1080p}, - new object[] {10, Quality.RAWHD}, + //new object[] {10, Quality.RAWHD}, new object[] {16, Quality.HDTV2160p}, new object[] {18, Quality.WEBDL2160p}, new object[] {19, Quality.Bluray2160p}, @@ -41,7 +41,7 @@ namespace NzbDrone.Core.Test.Qualities new object[] {Quality.Bluray1080p, 7}, new object[] {Quality.WEBDL480p, 8}, new object[] {Quality.HDTV1080p, 9}, - new object[] {Quality.RAWHD, 10}, + //new object[] {Quality.RAWHD, 10}, new object[] {Quality.HDTV2160p, 16}, new object[] {Quality.WEBDL2160p, 18}, new object[] {Quality.Bluray2160p, 19}, @@ -65,20 +65,26 @@ namespace NzbDrone.Core.Test.Qualities { var qualities = new List { - Quality.Unknown, + Quality.CAM, + Quality.TELECINE, + Quality.DVDSCR, + Quality.R5, Quality.SDTV, - Quality.WEBDL480p, Quality.DVD, + Quality.DVDR, Quality.HDTV720p, Quality.HDTV1080p, Quality.HDTV2160p, - Quality.RAWHD, + Quality.WEBDL480p, Quality.WEBDL720p, Quality.WEBDL1080p, Quality.WEBDL2160p, + Quality.Bluray480p, + Quality.Bluray576p, Quality.Bluray720p, Quality.Bluray1080p, Quality.Bluray2160p, + Quality.BRDISK }; if (allowed.Length == 0) diff --git a/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs index 3b8ebeedf..eb2e3b276 100644 --- a/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs @@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests { new ProfileQualityItem { Allowed = true, Quality = Quality.SDTV }, new ProfileQualityItem { Allowed = true, Quality = Quality.WEBDL480p }, - new ProfileQualityItem { Allowed = true, Quality = Quality.RAWHD } + //new ProfileQualityItem { Allowed = true, Quality = Quality.RAWHD } } }; @@ -71,13 +71,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests var qualityMet = new EpisodeFile { RelativePath = "a", Quality = new QualityModel { Quality = Quality.WEBDL480p } }; var qualityUnmet = new EpisodeFile { RelativePath = "b", Quality = new QualityModel { Quality = Quality.SDTV } }; - var qualityRawHD = new EpisodeFile { RelativePath = "c", Quality = new QualityModel { Quality = Quality.RAWHD } }; + //var qualityRawHD = new EpisodeFile { RelativePath = "c", Quality = new QualityModel { Quality = Quality.RAWHD } }; MediaFileRepository fileRepository = Mocker.Resolve(); qualityMet = fileRepository.Insert(qualityMet); qualityUnmet = fileRepository.Insert(qualityUnmet); - qualityRawHD = fileRepository.Insert(qualityRawHD); + //qualityRawHD = fileRepository.Insert(qualityRawHD); var monitoredSeriesEpisodes = Builder.CreateListOfSize(4) .All() @@ -90,8 +90,8 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests .With(e => e.Monitored = false) .With(e => e.EpisodeFileId = qualityMet.Id) .TheNext(1) - .With(e => e.EpisodeFileId = qualityRawHD.Id) - .TheLast(1) + //.With(e => e.EpisodeFileId = qualityRawHD.Id) + //.TheLast(1) .With(e => e.SeasonNumber = 0) .Build(); diff --git a/src/NzbDrone.Core/Indexers/PassThePopcorn/PassThePopcornSettings.cs b/src/NzbDrone.Core/Indexers/PassThePopcorn/PassThePopcornSettings.cs index 88d7e15b2..b0ab2721c 100644 --- a/src/NzbDrone.Core/Indexers/PassThePopcorn/PassThePopcornSettings.cs +++ b/src/NzbDrone.Core/Indexers/PassThePopcorn/PassThePopcornSettings.cs @@ -44,6 +44,9 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn [FieldDefinition(4, Type = FieldType.Checkbox, Label = "Require Approved", HelpText = "Require staff-approval for releases to be accepted.")] public bool Approved { get; set; } + [FieldDefinition(5, Type = FieldType.Checkbox, Label = "Require Golden", HelpText = "Require Golden Popcorn-releases for releases to be accepted.")] + public bool RequireGolden { get; set; } + public NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); diff --git a/src/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs index c8a4040b1..96de9c764 100644 --- a/src/NzbDrone.Core/Parser/QualityParser.cs +++ b/src/NzbDrone.Core/Parser/QualityParser.cs @@ -75,11 +75,11 @@ namespace NzbDrone.Core.Parser } } - if (RawHDRegex.IsMatch(normalizedName)) - { - result.Quality = Quality.RAWHD; - return result; - } + //if (RawHDRegex.IsMatch(normalizedName)) + //{ + // result.Quality = Quality.RAWHD; + // return result; + //} var sourceMatch = SourceRegex.Matches(normalizedName).OfType().LastOrDefault(); var resolution = ParseResolution(normalizedName); diff --git a/src/NzbDrone.Core/Profiles/ProfileService.cs b/src/NzbDrone.Core/Profiles/ProfileService.cs index 89c569ff1..b6c39cc83 100644 --- a/src/NzbDrone.Core/Profiles/ProfileService.cs +++ b/src/NzbDrone.Core/Profiles/ProfileService.cs @@ -85,38 +85,53 @@ namespace NzbDrone.Core.Profiles _logger.Info("Setting up default quality profiles"); - AddDefaultProfile("Any", Quality.SDTV, + AddDefaultProfile("Any", Quality.DVD, + Quality.CAM, + Quality.TELECINE, + Quality.DVDSCR, + Quality.R5, Quality.SDTV, - Quality.WEBDL480p, Quality.DVD, + Quality.DVDR, Quality.HDTV720p, Quality.HDTV1080p, + Quality.HDTV2160p, + Quality.WEBDL480p, Quality.WEBDL720p, Quality.WEBDL1080p, + Quality.WEBDL2160p, + Quality.Bluray480p, + Quality.Bluray576p, Quality.Bluray720p, - Quality.Bluray1080p); - - AddDefaultProfile("SD", Quality.SDTV, + Quality.Bluray1080p, + Quality.Bluray2160p, + Quality.BRDISK); + + AddDefaultProfile("SD", Quality.DVD, + Quality.CAM, + Quality.TELECINE, + Quality.DVDSCR, + Quality.R5, Quality.SDTV, - Quality.WEBDL480p, - Quality.DVD); + Quality.DVD, + Quality.WEBDL480p); - AddDefaultProfile("HD-720p", Quality.HDTV720p, + AddDefaultProfile("HD-720p", Quality.Bluray720p, Quality.HDTV720p, Quality.WEBDL720p, Quality.Bluray720p); - AddDefaultProfile("HD-1080p", Quality.HDTV1080p, + AddDefaultProfile("HD-1080p", Quality.Bluray1080p, Quality.HDTV1080p, Quality.WEBDL1080p, Quality.Bluray1080p); - AddDefaultProfile("Ultra-HD", Quality.HDTV2160p, + AddDefaultProfile("Ultra-HD", Quality.Bluray2160p, Quality.HDTV2160p, Quality.WEBDL2160p, Quality.Bluray2160p); - AddDefaultProfile("HD - 720p/1080p", Quality.HDTV720p, + AddDefaultProfile("HD - 720p/1080p", Quality.Bluray720p, Quality.HDTV720p, Quality.HDTV1080p, Quality.WEBDL720p, diff --git a/src/NzbDrone.Core/Qualities/Quality.cs b/src/NzbDrone.Core/Qualities/Quality.cs index 2230b7320..ee2002294 100644 --- a/src/NzbDrone.Core/Qualities/Quality.cs +++ b/src/NzbDrone.Core/Qualities/Quality.cs @@ -55,45 +55,67 @@ namespace NzbDrone.Core.Qualities return !Equals(left, right); } - public static Quality Unknown => new Quality(0, "Unknown"); - public static Quality SDTV => new Quality(1, "SDTV"); - public static Quality DVD => new Quality(2, "DVD"); - public static Quality WEBDL1080p => new Quality(3, "WEBDL-1080p"); - public static Quality HDTV720p => new Quality(4, "HDTV-720p"); - public static Quality WEBDL720p => new Quality(5, "WEBDL-720p"); - public static Quality Bluray720p => new Quality(6, "Bluray-720p"); - public static Quality Bluray1080p => new Quality(7, "Bluray-1080p"); - public static Quality WEBDL480p => new Quality(8, "WEBDL-480p"); - public static Quality HDTV1080p => new Quality(9, "HDTV-1080p"); - public static Quality RAWHD => new Quality(10, "Raw-HD"); - //public static Quality HDTV480p { get { return new Quality(11, "HDTV-480p"); } } - //public static Quality WEBRip480p { get { return new Quality(12, "WEBRip-480p"); } } - //public static Quality Bluray480p { get { return new Quality(13, "Bluray-480p"); } } - //public static Quality WEBRip720p { get { return new Quality(14, "WEBRip-720p"); } } - //public static Quality WEBRip1080p { get { return new Quality(15, "WEBRip-1080p"); } } + // Unable to determine + public static Quality Unknown => new Quality(0, "Unknown"); + + // Pre-release + public static Quality CAM => new Quality(24, "CAM"); // new + public static Quality TELECINE => new Quality(25, "TELECINE"); // new + public static Quality DVDSCR => new Quality(26, "DVDSCR"); // new + public static Quality R5 => new Quality(27, "R5"); // new + + // SD + public static Quality SDTV => new Quality(1, "SDTV"); + public static Quality DVD => new Quality(2, "DVD"); + public static Quality DVDR => new Quality(23, "DVD-R"); // new + + // HDTV + public static Quality HDTV720p => new Quality(4, "HDTV-720p"); + public static Quality HDTV1080p => new Quality(9, "HDTV-1080p"); public static Quality HDTV2160p => new Quality(16, "HDTV-2160p"); - //public static Quality WEBRip2160p { get { return new Quality(17, "WEBRip-2160p"); } } + + // Web-DL + public static Quality WEBDL480p => new Quality(8, "WEBDL-480p"); + public static Quality WEBDL720p => new Quality(5, "WEBDL-720p"); + public static Quality WEBDL1080p => new Quality(3, "WEBDL-1080p"); public static Quality WEBDL2160p => new Quality(18, "WEBDL-2160p"); + + // Bluray + public static Quality Bluray480p => new Quality(20, "Bluray-480p"); // new + public static Quality Bluray576p => new Quality(21, "Bluray-576p"); // new + public static Quality Bluray720p => new Quality(6, "Bluray-720p"); + public static Quality Bluray1080p => new Quality(7, "Bluray-1080p"); public static Quality Bluray2160p => new Quality(19, "Bluray-2160p"); + public static Quality BRDISK => new Quality(22, "BR-DISK"); // new + + // Others + // public static Quality RAWHD => new Quality(10, "Raw-HD"); static Quality() { All = new List { Unknown, + CAM, + TELECINE, + DVDSCR, + R5, SDTV, DVD, - WEBDL1080p, + DVDR, HDTV720p, - WEBDL720p, - Bluray720p, - Bluray1080p, - WEBDL480p, HDTV1080p, - RAWHD, HDTV2160p, + WEBDL480p, + WEBDL720p, + WEBDL1080p, WEBDL2160p, + Bluray480p, + Bluray576p, + Bluray720p, + Bluray1080p, Bluray2160p, + BRDISK }; AllLookup = new Quality[All.Select(v => v.Id).Max() + 1]; @@ -105,19 +127,30 @@ namespace NzbDrone.Core.Qualities DefaultQualityDefinitions = new HashSet { new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.SDTV) { Weight = 2, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.WEBDL480p) { Weight = 3, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.DVD) { Weight = 4, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.HDTV720p) { Weight = 5, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.HDTV1080p) { Weight = 6, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.RAWHD) { Weight = 7, MinSize = 0, MaxSize = null }, - new QualityDefinition(Quality.WEBDL720p) { Weight = 8, 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.Bluray1080p) { Weight = 11, MinSize = 0, MaxSize = null }, - new QualityDefinition(Quality.HDTV2160p) { Weight = 12, MinSize = 0, MaxSize = null }, - new QualityDefinition(Quality.WEBDL2160p) { Weight = 13, MinSize = 0, MaxSize = null }, - new QualityDefinition(Quality.Bluray2160p) { Weight = 14, MinSize = 0, MaxSize = null }, + new QualityDefinition(Quality.CAM) { Weight = 2, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.TELECINE) { Weight = 3, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.R5) { Weight = 4, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.DVDSCR) { Weight = 5, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.SDTV) { Weight = 6, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.DVD) { Weight = 7, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.DVDR) { Weight = 8, MinSize = 0, MaxSize = null }, + + new QualityDefinition(Quality.HDTV720p) { Weight = 9, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.HDTV1080p) { Weight = 10, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.HDTV2160p) { Weight = 11, MinSize = 0, MaxSize = null }, + + new QualityDefinition(Quality.WEBDL480p) { Weight = 12, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.WEBDL720p) { Weight = 13, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.WEBDL1080p) { Weight = 14, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.WEBDL2160p) { Weight = 15, MinSize = 0, MaxSize = null }, + + new QualityDefinition(Quality.Bluray480p) { Weight = 16, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.Bluray576p) { Weight = 17, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.Bluray720p) { Weight = 18, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.Bluray1080p) { Weight = 19, MinSize = 0, MaxSize = null }, + new QualityDefinition(Quality.Bluray2160p) { Weight = 20, MinSize = 0, MaxSize = null }, + + new QualityDefinition(Quality.BRDISK) { Weight = 21, MinSize = 0, MaxSize = null } }; }