Merge remote-tracking branch 'origin/quality'

pull/4/head
Mark McDowall 12 years ago
commit de62dc6f56

@ -21,7 +21,7 @@ namespace NzbDrone.Core.Test
parseResult.EpisodeNumbers = new List<int> { 3 }; parseResult.EpisodeNumbers = new List<int> { 3 };
parseResult.FullSeason = false; parseResult.FullSeason = false;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, false); parseResult.Quality = new QualityModel(QualityTypes.HDTV, false);
parseResult.ToString().Should().Be("My Series - S12E03 HDTV"); parseResult.ToString().Should().Be("My Series - S12E03 HDTV");
@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test
parseResult.EpisodeNumbers = new List<int> { 3 }; parseResult.EpisodeNumbers = new List<int> { 3 };
parseResult.FullSeason = false; parseResult.FullSeason = false;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, true); parseResult.Quality = new QualityModel(QualityTypes.HDTV, true);
parseResult.ToString().Should().Be("My Series - S12E03 HDTV [proper]"); parseResult.ToString().Should().Be("My Series - S12E03 HDTV [proper]");
@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test
parseResult.EpisodeNumbers = new List<int> { 3, 4, 5 }; parseResult.EpisodeNumbers = new List<int> { 3, 4, 5 };
parseResult.FullSeason = false; parseResult.FullSeason = false;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, false); parseResult.Quality = new QualityModel(QualityTypes.HDTV, false);
parseResult.ToString().Should().Be("My Series - S12E03-04-05 HDTV"); parseResult.ToString().Should().Be("My Series - S12E03-04-05 HDTV");
@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test
parseResult.EpisodeNumbers = new List<int> { 3, 4, 5 }; parseResult.EpisodeNumbers = new List<int> { 3, 4, 5 };
parseResult.FullSeason = false; parseResult.FullSeason = false;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, true); parseResult.Quality = new QualityModel(QualityTypes.HDTV, true);
parseResult.ToString().Should().Be("My Series - S12E03-04-05 HDTV [proper]"); parseResult.ToString().Should().Be("My Series - S12E03-04-05 HDTV [proper]");
@ -81,7 +81,7 @@ namespace NzbDrone.Core.Test
parseResult.SeasonNumber = 12; parseResult.SeasonNumber = 12;
parseResult.FullSeason = true; parseResult.FullSeason = true;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, false); parseResult.Quality = new QualityModel(QualityTypes.HDTV, false);
parseResult.ToString().Should().Be("My Series - Season 12 HDTV"); parseResult.ToString().Should().Be("My Series - Season 12 HDTV");
@ -96,7 +96,7 @@ namespace NzbDrone.Core.Test
parseResult.SeasonNumber = 12; parseResult.SeasonNumber = 12;
parseResult.FullSeason = true; parseResult.FullSeason = true;
parseResult.AirDate = null; parseResult.AirDate = null;
parseResult.Quality = new Quality(QualityTypes.HDTV, true); parseResult.Quality = new QualityModel(QualityTypes.HDTV, true);
parseResult.ToString().Should().Be("My Series - Season 12 HDTV [proper]"); parseResult.ToString().Should().Be("My Series - Season 12 HDTV [proper]");
@ -110,7 +110,7 @@ namespace NzbDrone.Core.Test
parseResult.SeasonNumber = 12; parseResult.SeasonNumber = 12;
parseResult.FullSeason = true; parseResult.FullSeason = true;
parseResult.AirDate = new DateTime(2010, 12, 30); parseResult.AirDate = new DateTime(2010, 12, 30);
parseResult.Quality = new Quality(QualityTypes.HDTV, false); parseResult.Quality = new QualityModel(QualityTypes.HDTV, false);
parseResult.ToString().Should().Be("My Series - 2010-12-30 HDTV"); parseResult.ToString().Should().Be("My Series - 2010-12-30 HDTV");
@ -124,7 +124,7 @@ namespace NzbDrone.Core.Test
parseResult.SeasonNumber = 12; parseResult.SeasonNumber = 12;
parseResult.FullSeason = true; parseResult.FullSeason = true;
parseResult.AirDate = new DateTime(2010, 12, 30); parseResult.AirDate = new DateTime(2010, 12, 30);
parseResult.Quality = new Quality(QualityTypes.HDTV, true); parseResult.Quality = new QualityModel(QualityTypes.HDTV, true);
parseResult.ToString().Should().Be("My Series - 2010-12-30 HDTV [proper]"); parseResult.ToString().Should().Be("My Series - 2010-12-30 HDTV [proper]");

@ -138,10 +138,14 @@ namespace NzbDrone.Core.Test
ExceptionVerification.IgnoreWarns(); ExceptionVerification.IgnoreWarns();
} }
[Test]
[TestCase("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", 3, 19, QualityTypes.DVD)] public void custome_parser_partial_success()
public void custome_parser_partial_success(string title, int season, int episode, QualityTypes quality)
{ {
const string title = "Adventure.Inc.S03E19.DVDRip.XviD-OSiTV";
const int season = 3;
const int episode = 19;
var quality = QualityTypes.DVD;
const string summary = "My fake summary"; const string summary = "My fake summary";
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build(); var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
@ -160,10 +164,9 @@ namespace NzbDrone.Core.Test
Assert.AreEqual(LanguageType.Finnish, result.Language); Assert.AreEqual(LanguageType.Finnish, result.Language);
Assert.AreEqual(season, result.SeasonNumber); Assert.AreEqual(season, result.SeasonNumber);
Assert.AreEqual(episode, result.EpisodeNumbers[0]); Assert.AreEqual(episode, result.EpisodeNumbers[0]);
Assert.AreEqual(quality, result.Quality.QualityType); Assert.AreEqual(quality, result.Quality.Quality);
} }
[TestCase("Adventure.Inc.DVDRip.XviD-OSiTV")] [TestCase("Adventure.Inc.DVDRip.XviD-OSiTV")]
public void custome_parser_full_parse(string title) public void custome_parser_full_parse(string title)
{ {

@ -137,12 +137,14 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="QualityTypesTest.cs" />
<Compile Include="EpisodeParseResultTest.cs" /> <Compile Include="EpisodeParseResultTest.cs" />
<Compile Include="Integeration\ServiceIntegerationFixture.cs" /> <Compile Include="Integeration\ServiceIntegerationFixture.cs" />
<Compile Include="JobTests\BacklogSearchJobTest.cs" /> <Compile Include="JobTests\BacklogSearchJobTest.cs" />
<Compile Include="JobTests\BannerDownloadJobTest.cs" /> <Compile Include="JobTests\BannerDownloadJobTest.cs" />
<Compile Include="JobTests\RssSyncJobTest.cs" /> <Compile Include="JobTests\RssSyncJobTest.cs" />
<Compile Include="JobTests\RecentBacklogSearchJobTest.cs" /> <Compile Include="JobTests\RecentBacklogSearchJobTest.cs" />
<Compile Include="ParserFixture\QualityParserTests.cs" />
<Compile Include="ProviderTests\ConfigProviderTests\ConfigCachingFixture.cs" /> <Compile Include="ProviderTests\ConfigProviderTests\ConfigCachingFixture.cs" />
<Compile Include="ProviderTests\BannerProviderTest.cs" /> <Compile Include="ProviderTests\BannerProviderTest.cs" />
<Compile Include="ProviderTests\DecisionEngineTests\AllowedReleaseGroupSpecificationFixture.cs" /> <Compile Include="ProviderTests\DecisionEngineTests\AllowedReleaseGroupSpecificationFixture.cs" />
@ -226,7 +228,7 @@
<Compile Include="ProviderTests\ConfigProviderTests\ConfigProviderFixture.cs" /> <Compile Include="ProviderTests\ConfigProviderTests\ConfigProviderFixture.cs" />
<Compile Include="ProviderTests\EpisodeProviderTest.cs" /> <Compile Include="ProviderTests\EpisodeProviderTest.cs" />
<Compile Include="Framework\TestDbHelper.cs" /> <Compile Include="Framework\TestDbHelper.cs" />
<Compile Include="ParserTest.cs" /> <Compile Include="ParserFixture\ParserTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="QualityProfileTest.cs" /> <Compile Include="QualityProfileTest.cs" />
<Compile Include="ProviderTests\DownloadClientTests\SabProviderTests\SabProviderFixture.cs" /> <Compile Include="ProviderTests\DownloadClientTests\SabProviderTests\SabProviderFixture.cs" />

@ -23,5 +23,8 @@
<NamedTestSelector> <NamedTestSelector>
<TestName>NzbDrone.Core.Test.Integeration.ServiceIntegerationFixture.should_be_able_to_submit_exceptions</TestName> <TestName>NzbDrone.Core.Test.Integeration.ServiceIntegerationFixture.should_be_able_to_submit_exceptions</TestName>
</NamedTestSelector> </NamedTestSelector>
<NamedTestSelector>
<TestName>NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests.ImportFileFixture.import_unparsable_file_should_skip</TestName>
</NamedTestSelector>
</IgnoredTests> </IgnoredTests>
</ProjectConfiguration> </ProjectConfiguration>

@ -11,7 +11,7 @@ using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common; using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test namespace NzbDrone.Core.Test.ParserFixture
{ {
[TestFixture] [TestFixture]
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
@ -126,73 +126,6 @@ namespace NzbDrone.Core.Test
ExceptionVerification.IgnoreWarns(); ExceptionVerification.IgnoreWarns();
} }
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", QualityTypes.DVD, false)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.X-viD.AC3.-HELLYWOOD", QualityTypes.DVD, false)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.AC3.-HELLYWOOD", QualityTypes.DVD, false)]
[TestCase("Two.and.a.Half.Men.S08E05.720p.HDTV.X264-DIMENSION", QualityTypes.HDTV, false)]
[TestCase("this has no extention or periods HDTV", QualityTypes.SDTV, false)]
[TestCase("Chuck.S04E05.HDTV.XviD-LOL", QualityTypes.SDTV, false)]
[TestCase("The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", QualityTypes.DVD, false)]
[TestCase("The.Girls.Next.Door.S03E06.DVD.Rip.XviD-WiDE", QualityTypes.DVD, false)]
[TestCase("The.Girls.Next.Door.S03E06.HDTV-WiDE", QualityTypes.SDTV, false)]
[TestCase("Degrassi.S10E27.WS.DSR.XviD-2HD", QualityTypes.SDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15.720p.WEB-DL.DD5.1.H.264-SURFER", QualityTypes.WEBDL, false)]
[TestCase("Sonny.With.a.Chance.S02E15.720p", QualityTypes.HDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15.mkv", QualityTypes.HDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15.avi", QualityTypes.SDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15.xvid", QualityTypes.SDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15.divx", QualityTypes.SDTV, false)]
[TestCase("Sonny.With.a.Chance.S02E15", QualityTypes.Unknown, false)]
[TestCase("Chuck - S01E04 - So Old - Playdate - 720p TV.mkv", QualityTypes.HDTV, false)]
[TestCase("Chuck - S22E03 - MoneyBART - HD TV.mkv", QualityTypes.HDTV, false)]
[TestCase("Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", QualityTypes.Bluray720p, false)]
[TestCase("Chuck - S01E03 - Come Fly With Me - 1080p BluRay.mkv", QualityTypes.Bluray1080p, false)]
[TestCase("Chuck - S11E06 - D-Yikes! - 720p WEB-DL.mkv", QualityTypes.WEBDL, false)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false)]
[TestCase("Law & Order: Special Victims Unit - 11x11 - Quickie", QualityTypes.Unknown, false)]
[TestCase("(<a href=\"http://www.newzbin.com/browse/post/6076286/nzb/\">NZB</a>)", QualityTypes.Unknown, false)]
[TestCase("S07E23 - [HDTV].mkv ", QualityTypes.HDTV, false)]
[TestCase("S07E23 - [WEBDL].mkv ", QualityTypes.WEBDL, false)]
[TestCase("S07E23.mkv ", QualityTypes.HDTV, false)]
[TestCase("S07E23 .avi ", QualityTypes.SDTV, false)]
[TestCase("WEEDS.S03E01-06.DUAL.XviD.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false)]
[TestCase("WEEDS.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.Bluray720p, false)]
[TestCase("The Voice S01E11 The Finals 1080i HDTV DD5.1 MPEG2-TrollHD", QualityTypes.Unknown, false)]
[TestCase("Nikita S02E01 HDTV XviD 2HD", QualityTypes.SDTV, false)]
[TestCase("Gossip Girl S05E11 PROPER HDTV XviD 2HD", QualityTypes.SDTV, true)]
[TestCase("The Jonathan Ross Show S02E08 HDTV x264 FTP", QualityTypes.SDTV, false)]
[TestCase("White.Van.Man.2011.S02E01.WS.PDTV.x264-TLA", QualityTypes.SDTV, false)]
[TestCase("White.Van.Man.2011.S02E01.WS.PDTV.x264-REPACK-TLA", QualityTypes.SDTV, true)]
[TestCase("WEEDS.S03E01-06.DUAL.XviD.Bluray.AC3-REPACK.-HELLYWOOD.avi", QualityTypes.DVD, true)]
[TestCase("Pawn Stars S04E87 REPACK 720p HDTV x264 aAF", QualityTypes.HDTV, true)]
[TestCase("The Real Housewives of Vancouver S01E04 DSR x264 2HD", QualityTypes.SDTV, false)]
[TestCase("Vanguard S01E04 Mexicos Death Train DSR x264 MiNDTHEGAP", QualityTypes.SDTV, false)]
[TestCase("Vanguard S01E04 Mexicos Death Train 720 WEB DL", QualityTypes.WEBDL, false)]
[TestCase("Hawaii Five 0 S02E21 720p WEB DL DD5 1 H 264", QualityTypes.WEBDL, false)]
[TestCase("Castle S04E22 720p WEB DL DD5 1 H 264 NFHD", QualityTypes.WEBDL, false)]
[TestCase("Fringe S04E22 720p WEB-DL DD5.1 H264-EbP.mkv", QualityTypes.WEBDL, false)]
[TestCase("Fringe.S04E22.720p.WEB.DL.DD5.1.H264-EbP", QualityTypes.WEBDL, false)]
public void quality_parse(string postTitle, object quality, bool proper)
{
var result = Parser.ParseQuality(postTitle);
result.QualityType.Should().Be(quality);
result.Proper.Should().Be(proper);
}
[Test]
public void parsing_our_own_quality_enum()
{
var qualityEnums = Enum.GetValues(typeof(QualityTypes));
foreach (var qualityEnum in qualityEnums)
{
var fileName = String.Format("My series S01E01 [{0}]", qualityEnum);
var result = Parser.ParseQuality(fileName);
result.QualityType.Should().Be(qualityEnum);
}
}
//[Timeout(1000)] //[Timeout(1000)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", "WEEDS", 3, new[] { 1, 2, 3, 4, 5, 6 })] [TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", "WEEDS", 3, new[] { 1, 2, 3, 4, 5, 6 })]
[TestCase("Two.and.a.Half.Men.103.104.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Men", 1, new[] { 3, 4 })] [TestCase("Two.and.a.Half.Men.103.104.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Men", 1, new[] { 3, 4 })]

@ -0,0 +1,101 @@
// ReSharper disable RedundantUsingDirective
using System;
using System.Linq;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Common;
using NzbDrone.Common.Contract;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.ParserFixture
{
[TestFixture]
// ReSharper disable InconsistentNaming
public class QualityParserTests : CoreTest
{
public static object[] QualityParserCases =
{
new object[] { "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", QualityTypes.DVD, false },
new object[] { "WEEDS.S03E01-06.DUAL.BDRip.X-viD.AC3.-HELLYWOOD", QualityTypes.DVD, false },
new object[] { "WEEDS.S03E01-06.DUAL.BDRip.AC3.-HELLYWOOD", QualityTypes.DVD, false },
new object[] { "Two.and.a.Half.Men.S08E05.720p.HDTV.X264-DIMENSION", QualityTypes.HDTV, false },
new object[] { "this has no extention or periods HDTV", QualityTypes.SDTV, false },
new object[] { "Chuck.S04E05.HDTV.XviD-LOL", QualityTypes.SDTV, false },
new object[] { "The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", QualityTypes.DVD, false },
new object[] { "The.Girls.Next.Door.S03E06.DVD.Rip.XviD-WiDE", QualityTypes.DVD, false },
new object[] { "The.Girls.Next.Door.S03E06.HDTV-WiDE", QualityTypes.SDTV, false },
new object[] { "Degrassi.S10E27.WS.DSR.XviD-2HD", QualityTypes.SDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15.720p.WEB-DL.DD5.1.H.264-SURFER", QualityTypes.WEBDL720p, false },
new object[] { "Sonny.With.a.Chance.S02E15.720p", QualityTypes.HDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15.mkv", QualityTypes.HDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15.avi", QualityTypes.SDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15.xvid", QualityTypes.SDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15.divx", QualityTypes.SDTV, false },
new object[] { "Sonny.With.a.Chance.S02E15", QualityTypes.Unknown, false },
new object[] { "Chuck - S01E04 - So Old - Playdate - 720p TV.mkv", QualityTypes.HDTV, false },
new object[] { "Chuck - S22E03 - MoneyBART - HD TV.mkv", QualityTypes.HDTV, false },
new object[] { "Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", QualityTypes.Bluray720p, false },
new object[] { "Chuck - S01E03 - Come Fly With Me - 1080p BluRay.mkv", QualityTypes.Bluray1080p, false },
new object[] { "Chuck - S11E06 - D-Yikes! - 720p WEB-DL.mkv", QualityTypes.WEBDL720p, false },
new object[] { "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false },
new object[] { "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false },
new object[] { "Law & Order: Special Victims Unit - 11x11 - Quickie", QualityTypes.Unknown, false },
new object[] { "(<a href=\"http://www.newzbin.com/browse/post/6076286/nzb/\">NZB</a>)", QualityTypes.Unknown, false },
new object[] { "S07E23 - [HDTV].mkv ", QualityTypes.HDTV, false },
new object[] { "S07E23 - [WEBDL].mkv ", QualityTypes.WEBDL720p, false },
new object[] { "S07E23.mkv ", QualityTypes.HDTV, false },
new object[] { "S07E23 .avi ", QualityTypes.SDTV, false },
new object[] { "WEEDS.S03E01-06.DUAL.XviD.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.DVD, false },
new object[] { "WEEDS.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.Bluray720p, false },
new object[] { "The Voice S01E11 The Finals 1080i HDTV DD5.1 MPEG2-TrollHD", QualityTypes.Unknown, false },
new object[] { "Nikita S02E01 HDTV XviD 2HD", QualityTypes.SDTV, false },
new object[] { "Gossip Girl S05E11 PROPER HDTV XviD 2HD", QualityTypes.SDTV, true },
new object[] { "The Jonathan Ross Show S02E08 HDTV x264 FTP", QualityTypes.SDTV, false },
new object[] { "White.Van.Man.2011.S02E01.WS.PDTV.x264-TLA", QualityTypes.SDTV, false },
new object[] { "White.Van.Man.2011.S02E01.WS.PDTV.x264-REPACK-TLA", QualityTypes.SDTV, true },
new object[] { "WEEDS.S03E01-06.DUAL.XviD.Bluray.AC3-REPACK.-HELLYWOOD.avi", QualityTypes.DVD, true },
new object[] { "Pawn Stars S04E87 REPACK 720p HDTV x264 aAF", QualityTypes.HDTV, true },
new object[] { "The Real Housewives of Vancouver S01E04 DSR x264 2HD", QualityTypes.SDTV, false },
new object[] { "Vanguard S01E04 Mexicos Death Train DSR x264 MiNDTHEGAP", QualityTypes.SDTV, false },
new object[] { "Vanguard S01E04 Mexicos Death Train 720 WEB DL", QualityTypes.WEBDL720p, false },
new object[] { "Hawaii Five 0 S02E21 720p WEB DL DD5 1 H 264", QualityTypes.WEBDL720p, false },
new object[] { "Castle S04E22 720p WEB DL DD5 1 H 264 NFHD", QualityTypes.WEBDL720p, false },
new object[] { "Fringe S04E22 720p WEB-DL DD5.1 H264-EbP.mkv", QualityTypes.WEBDL720p, false },
new object[] { "CSI NY S09E03 1080p WEB DL DD5 1 H264 NFHD", QualityTypes.WEBDL1080p, false },
new object[] { "Two and a Half Men S10E03 1080p WEB DL DD5 1 H 264 NFHD", QualityTypes.WEBDL1080p, false },
new object[] { "Criminal.Minds.S08E01.1080p.WEB-DL.DD5.1.H264-NFHD", QualityTypes.WEBDL1080p, false },
new object[] { "Its.Always.Sunny.in.Philadelphia.S08E01.1080p.WEB-DL.proper.AAC2.0.H.264", QualityTypes.WEBDL1080p, true },
new object[] { "Two and a Half Men S10E03 1080p WEB DL DD5 1 H 264 REPACK NFHD", QualityTypes.WEBDL1080p, true },
};
public static object[] SelfQualityParserCases =
{
new object[] { QualityTypes.SDTV },
new object[] { QualityTypes.DVD },
new object[] { QualityTypes.HDTV },
new object[] { QualityTypes.WEBDL720p },
new object[] { QualityTypes.Bluray720p },
new object[] { QualityTypes.Bluray1080p }
};
[Test, TestCaseSource("QualityParserCases")]
public void quality_parse(string postTitle, QualityTypes quality, bool proper)
{
var result = Parser.ParseQuality(postTitle);
result.Quality.Should().Be(quality);
result.Proper.Should().Be(proper);
}
[Test, TestCaseSource("SelfQualityParserCases")]
public void parsing_our_own_quality_enum(QualityTypes quality)
{
var fileName = String.Format("My series S01E01 [{0}]", quality);
var result = Parser.ParseQuality(fileName);
result.Quality.Should().Be(quality);
}
}
}

@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
{ {
SeriesTitle = "Title", SeriesTitle = "Title",
Language = LanguageType.English, Language = LanguageType.English,
Quality = new Quality(QualityTypes.SDTV, true), Quality = new QualityModel(QualityTypes.SDTV, true),
EpisodeNumbers = new List<int> { 3, 4 }, EpisodeNumbers = new List<int> { 3, 4 },
SeasonNumber = 12, SeasonNumber = 12,
AirDate = DateTime.Now.AddDays(-12).Date AirDate = DateTime.Now.AddDays(-12).Date
@ -43,7 +43,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
{ {
SeriesTitle = "Title", SeriesTitle = "Title",
Language = LanguageType.English, Language = LanguageType.English,
Quality = new Quality(QualityTypes.SDTV, true), Quality = new QualityModel(QualityTypes.SDTV, true),
EpisodeNumbers = new List<int> { 3 }, EpisodeNumbers = new List<int> { 3 },
SeasonNumber = 12, SeasonNumber = 12,
AirDate = DateTime.Now.AddDays(-12).Date AirDate = DateTime.Now.AddDays(-12).Date

@ -30,7 +30,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
{ {
SeriesTitle = "Title", SeriesTitle = "Title",
Language = LanguageType.English, Language = LanguageType.English,
Quality = new Quality(QualityTypes.SDTV, true), Quality = new QualityModel(QualityTypes.SDTV, true),
EpisodeNumbers = new List<int> { 3 }, EpisodeNumbers = new List<int> { 3 },
SeasonNumber = 12, SeasonNumber = 12,
AirDate = DateTime.Now.AddDays(-12).Date, AirDate = DateTime.Now.AddDays(-12).Date,

@ -18,10 +18,21 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
public class QualityAllowedByProfileSpecificationFixtrue : CoreTest public class QualityAllowedByProfileSpecificationFixtrue : CoreTest
{ {
private QualityAllowedByProfileSpecification _qualityAllowedByProfile; private QualityAllowedByProfileSpecification _qualityAllowedByProfile;
private EpisodeParseResult parseResult; private EpisodeParseResult parseResult;
public static object[] AllowedTestCases =
{
new object[] { QualityTypes.DVD },
new object[] { QualityTypes.HDTV },
new object[] { QualityTypes.Bluray1080p }
};
public static object[] DeniedTestCases =
{
new object[] { QualityTypes.SDTV },
new object[] { QualityTypes.WEBDL720p },
new object[] { QualityTypes.Bluray720p }
};
[SetUp] [SetUp]
public void Setup() public void Setup()
@ -35,35 +46,28 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
parseResult = new EpisodeParseResult parseResult = new EpisodeParseResult
{ {
Series = fakeSeries, Series = fakeSeries,
Quality = new Quality(QualityTypes.DVD, true), Quality = new QualityModel(QualityTypes.DVD, true),
EpisodeNumbers = new List<int> { 3 }, EpisodeNumbers = new List<int> { 3 },
SeasonNumber = 12, SeasonNumber = 12,
}; };
} }
[Test, TestCaseSource("AllowedTestCases")]
[TestCase(QualityTypes.DVD)]
[TestCase(QualityTypes.HDTV)]
[TestCase(QualityTypes.Bluray1080p)]
public void should_allow_if_quality_is_defined_in_profile(QualityTypes qualityType) public void should_allow_if_quality_is_defined_in_profile(QualityTypes qualityType)
{ {
parseResult.Quality.QualityType = qualityType; parseResult.Quality.Quality = qualityType;
parseResult.Series.QualityProfile.Allowed = new List<QualityTypes> { QualityTypes.DVD, QualityTypes.HDTV, QualityTypes.Bluray1080p }; parseResult.Series.QualityProfile.Allowed = new List<QualityTypes> { QualityTypes.DVD, QualityTypes.HDTV, QualityTypes.Bluray1080p };
_qualityAllowedByProfile.IsSatisfiedBy(parseResult).Should().BeTrue(); _qualityAllowedByProfile.IsSatisfiedBy(parseResult).Should().BeTrue();
} }
[TestCase(QualityTypes.SDTV)] [Test, TestCaseSource("DeniedTestCases")]
[TestCase(QualityTypes.WEBDL)]
[TestCase(QualityTypes.Bluray720p)]
public void should_not_allow_if_quality_is_not_defined_in_profile(QualityTypes qualityType) public void should_not_allow_if_quality_is_not_defined_in_profile(QualityTypes qualityType)
{ {
parseResult.Quality.QualityType = qualityType; parseResult.Quality.Quality = qualityType;
parseResult.Series.QualityProfile.Allowed = new List<QualityTypes> { QualityTypes.DVD, QualityTypes.HDTV, QualityTypes.Bluray1080p }; parseResult.Series.QualityProfile.Allowed = new List<QualityTypes> { QualityTypes.DVD, QualityTypes.HDTV, QualityTypes.Bluray1080p };
_qualityAllowedByProfile.IsSatisfiedBy(parseResult).Should().BeFalse(); _qualityAllowedByProfile.IsSatisfiedBy(parseResult).Should().BeFalse();
} }
} }
} }

@ -1,6 +1,7 @@
// ReSharper disable RedundantUsingDirective // ReSharper disable RedundantUsingDirective
using System.Linq; using System.Linq;
using FluentAssertions;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.DecisionEngine; using NzbDrone.Core.Providers.DecisionEngine;
@ -13,18 +14,23 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
public class QualityUpgradeSpecificationFixture : CoreTest public class QualityUpgradeSpecificationFixture : CoreTest
{ {
public static object[] IsUpgradeTestCases =
{
new object[] { QualityTypes.SDTV, false, QualityTypes.SDTV, true, QualityTypes.SDTV, true },
new object[] { QualityTypes.WEBDL720p, false, QualityTypes.WEBDL720p, true, QualityTypes.WEBDL720p, true },
new object[] { QualityTypes.SDTV, false, QualityTypes.SDTV, false, QualityTypes.SDTV, false },
new object[] { QualityTypes.SDTV, false, QualityTypes.DVD, true, QualityTypes.SDTV, false },
new object[] { QualityTypes.WEBDL720p, false, QualityTypes.HDTV, true, QualityTypes.Bluray720p, false },
new object[] { QualityTypes.WEBDL720p, false, QualityTypes.HDTV, true, QualityTypes.WEBDL720p, false },
new object[] { QualityTypes.WEBDL720p, false, QualityTypes.WEBDL720p, false, QualityTypes.WEBDL720p, false },
new object[] { QualityTypes.SDTV, false, QualityTypes.SDTV, true, QualityTypes.SDTV, true }
};
[TestCase(QualityTypes.SDTV, false, QualityTypes.SDTV, true, QualityTypes.SDTV, Result = true)] [Test, TestCaseSource("IsUpgradeTestCases")]
[TestCase(QualityTypes.WEBDL, false, QualityTypes.WEBDL, true, QualityTypes.WEBDL, Result = true)] public void IsUpgradeTest(QualityTypes current, bool currentProper, QualityTypes newQuality, bool newProper, QualityTypes cutoff, bool expected)
[TestCase(QualityTypes.SDTV, false, QualityTypes.SDTV, false, QualityTypes.SDTV, Result = false)]
[TestCase(QualityTypes.SDTV, false, QualityTypes.DVD, true, QualityTypes.SDTV, Result = false)]
[TestCase(QualityTypes.WEBDL, false, QualityTypes.HDTV, true, QualityTypes.Bluray720p, Result = false)]
[TestCase(QualityTypes.WEBDL, false, QualityTypes.HDTV, true, QualityTypes.WEBDL, Result = false)]
[TestCase(QualityTypes.WEBDL, false, QualityTypes.WEBDL, false, QualityTypes.WEBDL, Result = false)]
[TestCase(QualityTypes.SDTV, false, QualityTypes.SDTV, true, QualityTypes.SDTV, Result = true)]
public bool IsUpgradeTest(QualityTypes current, bool currentProper, QualityTypes newQuality, bool newProper, QualityTypes cutoff)
{ {
return new QualityUpgradeSpecification().IsSatisfiedBy(new Quality(current, currentProper), new Quality(newQuality, newProper), cutoff); new QualityUpgradeSpecification().IsSatisfiedBy(new QualityModel(current, currentProper), new QualityModel(newQuality, newProper), cutoff)
.Should().Be(expected);
} }
} }
} }

@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
parseResultMulti = new EpisodeParseResult parseResultMulti = new EpisodeParseResult
{ {
Series = fakeSeries, Series = fakeSeries,
Quality = new Quality(QualityTypes.DVD, true), Quality = new QualityModel(QualityTypes.DVD, true),
EpisodeNumbers = new List<int> { 3, 4 }, EpisodeNumbers = new List<int> { 3, 4 },
SeasonNumber = 12, SeasonNumber = 12,
}; };
@ -46,7 +46,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
parseResultSingle = new EpisodeParseResult parseResultSingle = new EpisodeParseResult
{ {
Series = fakeSeries, Series = fakeSeries,
Quality = new Quality(QualityTypes.DVD, true), Quality = new QualityModel(QualityTypes.DVD, true),
EpisodeNumbers = new List<int> { 3 }, EpisodeNumbers = new List<int> { 3 },
SeasonNumber = 12, SeasonNumber = 12,
}; };

@ -22,8 +22,8 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
private EpisodeParseResult parseResultMulti; private EpisodeParseResult parseResultMulti;
private EpisodeParseResult parseResultSingle; private EpisodeParseResult parseResultSingle;
private Quality firstQuality; private QualityModel firstQuality;
private Quality secondQuality; private QualityModel secondQuality;
[SetUp] [SetUp]
public void Setup() public void Setup()
@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
parseResultMulti = new EpisodeParseResult parseResultMulti = new EpisodeParseResult
{ {
Series = fakeSeries, Series = fakeSeries,
Quality = new Quality(QualityTypes.DVD, true), Quality = new QualityModel(QualityTypes.DVD, true),
EpisodeNumbers = new List<int> { 3, 4 }, EpisodeNumbers = new List<int> { 3, 4 },
SeasonNumber = 12, SeasonNumber = 12,
}; };
@ -46,13 +46,13 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
parseResultSingle = new EpisodeParseResult parseResultSingle = new EpisodeParseResult
{ {
Series = fakeSeries, Series = fakeSeries,
Quality = new Quality(QualityTypes.DVD, true), Quality = new QualityModel(QualityTypes.DVD, true),
EpisodeNumbers = new List<int> { 3 }, EpisodeNumbers = new List<int> { 3 },
SeasonNumber = 12, SeasonNumber = 12,
}; };
firstQuality = new Quality(QualityTypes.Bluray1080p, true); firstQuality = new QualityModel(QualityTypes.Bluray1080p, true);
secondQuality = new Quality(QualityTypes.Bluray1080p, true); secondQuality = new QualityModel(QualityTypes.Bluray1080p, true);
var singleEpisodeList = new List<Episode> { new Episode { SeasonNumber = 12, EpisodeNumber = 3 } }; var singleEpisodeList = new List<Episode> { new Episode { SeasonNumber = 12, EpisodeNumber = 3 } };
var doubleEpisodeList = new List<Episode> { var doubleEpisodeList = new List<Episode> {
@ -66,17 +66,17 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 3)).Returns(firstQuality); Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 3)).Returns(firstQuality);
Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 4)).Returns(secondQuality); Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 4)).Returns(secondQuality);
Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 5)).Returns<Quality>(null); Mocker.GetMock<HistoryProvider>().Setup(c => c.GetBestQualityInHistory(fakeSeries.SeriesId, 12, 5)).Returns<QualityModel>(null);
} }
private void WithFirstReportUpgradable() private void WithFirstReportUpgradable()
{ {
firstQuality.QualityType = QualityTypes.SDTV; firstQuality.Quality = QualityTypes.SDTV;
} }
private void WithSecondReportUpgradable() private void WithSecondReportUpgradable()
{ {
secondQuality.QualityType = QualityTypes.SDTV; secondQuality.Quality = QualityTypes.SDTV;
} }

@ -19,7 +19,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
{ {
private void WithWebdlCutoff() private void WithWebdlCutoff()
{ {
var profile = new QualityProfile { Cutoff = QualityTypes.WEBDL }; var profile = new QualityProfile { Cutoff = QualityTypes.WEBDL720p };
Mocker.GetMock<QualityProvider>().Setup(s => s.Get(It.IsAny<int>())).Returns(profile); Mocker.GetMock<QualityProvider>().Setup(s => s.Get(It.IsAny<int>())).Returns(profile);
} }
@ -77,7 +77,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
{ {
WithWebdlCutoff(); WithWebdlCutoff();
_episodeFile.Quality = QualityTypes.WEBDL; _episodeFile.Quality = QualityTypes.WEBDL720p;
//Act //Act
bool result = Mocker.Resolve<UpgradePossibleSpecification>().IsSatisfiedBy(_episode); bool result = Mocker.Resolve<UpgradePossibleSpecification>().IsSatisfiedBy(_episode);

@ -20,6 +20,13 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
public class ImportFileFixture : CoreTest public class ImportFileFixture : CoreTest
{ {
public static object[] ImportTestCases =
{
new object[] { QualityTypes.SDTV },
new object[] { QualityTypes.DVD },
new object[] { QualityTypes.HDTV }
};
[Test] [Test]
public void import_new_file_should_succeed() public void import_new_file_should_succeed()
{ {
@ -49,9 +56,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
} }
[TestCase(QualityTypes.SDTV, false)] [Test, TestCaseSource("ImportTestCases")]
[TestCase(QualityTypes.DVD, true)]
[TestCase(QualityTypes.HDTV, false)]
public void import_new_file_with_better_same_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper) public void import_new_file_with_better_same_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper)
{ {
const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv"; const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv";
@ -262,9 +267,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Build()) .Build())
.Build(); .Build();
//Mocks
Mocker.GetMock<DiskProvider>() Mocker.GetMock<DiskProvider>()
.Setup(e => e.GetSize(fileName)).Returns(12345).Verifiable(); .Setup(e => e.GetSize(fileName)).Returns(12345).Verifiable();

@ -91,7 +91,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
var file = Builder<EpisodeFile>.CreateNew() var file = Builder<EpisodeFile>.CreateNew()
.With(f => f.SeriesId = fakeSeries.SeriesId) .With(f => f.SeriesId = fakeSeries.SeriesId)
.With(f => f.Path = currentFilename) .With(f => f.Path = currentFilename)
.With(f => f.Quality = QualityTypes.WEBDL) .With(f => f.Quality = QualityTypes.WEBDL720p)
.With(f => f.Proper = false) .With(f => f.Proper = false)
.Build(); .Build();
@ -112,7 +112,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Returns(fi); .Returns(fi);
Mocker.GetMock<DownloadProvider>() Mocker.GetMock<DownloadProvider>()
.Setup(s => s.GetDownloadTitle(It.Is<EpisodeParseResult>(e => e.Quality == new Quality{ QualityType = QualityTypes.WEBDL, Proper = false }))) .Setup(s => s.GetDownloadTitle(It.Is<EpisodeParseResult>(e => e.Quality == new QualityModel{ Quality = QualityTypes.WEBDL720p, Proper = false })))
.Returns(message); .Returns(message);
Mocker.GetMock<ExternalNotificationProvider>() Mocker.GetMock<ExternalNotificationProvider>()

@ -128,7 +128,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int> { 5 }, EpisodeNumbers = new List<int> { 5 },
SeasonNumber = 1, SeasonNumber = 1,
Quality = new Quality { QualityType = QualityTypes.SDTV, Proper = false }, Quality = new QualityModel { Quality = QualityTypes.SDTV, Proper = false },
Series = new Series { Title = "30 Rock", CleanTitle = Parser.NormalizeTitle("30 Rock") }, Series = new Series { Title = "30 Rock", CleanTitle = Parser.NormalizeTitle("30 Rock") },
}; };
@ -145,7 +145,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
var parseResult = new EpisodeParseResult var parseResult = new EpisodeParseResult
{ {
Quality = new Quality { QualityType = QualityTypes.Bluray720p, Proper = false }, Quality = new QualityModel { Quality = QualityTypes.Bluray720p, Proper = false },
AirDate = new DateTime(2011, 12, 01), AirDate = new DateTime(2011, 12, 01),
Series = new Series { Title = "The Dailyshow", CleanTitle = Parser.NormalizeTitle("The Dailyshow"), IsDaily = true }, Series = new Series { Title = "The Dailyshow", CleanTitle = Parser.NormalizeTitle("The Dailyshow"), IsDaily = true },
}; };
@ -164,7 +164,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
var parseResult = new EpisodeParseResult var parseResult = new EpisodeParseResult
{ {
Quality = new Quality { QualityType = QualityTypes.Bluray720p, Proper = false }, Quality = new QualityModel { Quality = QualityTypes.Bluray720p, Proper = false },
FullSeason = true, FullSeason = true,
SeasonNumber = 5, SeasonNumber = 5,
Series = new Series { Title = "My Name is earl", CleanTitle = Parser.NormalizeTitle("My Name is earl") }, Series = new Series { Title = "My Name is earl", CleanTitle = Parser.NormalizeTitle("My Name is earl") },
@ -175,13 +175,18 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
result.Should().BeTrue(); result.Should().BeTrue();
} }
[TestCase(2, new[] { 5 }, "30 Rock", QualityTypes.Bluray1080p, true, Description = "Same Series, Different Season, Episode")] public static object[] DifferentEpisodeCases =
[TestCase(1, new[] { 6 }, "30 Rock", QualityTypes.Bluray1080p, true, Description = "Same series, different episodes")] {
[TestCase(1, new[] { 6, 7, 8 }, "30 Rock", QualityTypes.Bluray1080p, true, Description = "Same series, different episodes")] new object[] { 2, new[] { 5 }, "30 Rock", QualityTypes.Bluray1080p, true }, //Same Series, Different Season, Episode
[TestCase(1, new[] { 6 }, "Some other show", QualityTypes.Bluray1080p, true, Description = "Different series, same season, episode")] new object[] { 1, new[] { 6 }, "30 Rock", QualityTypes.Bluray1080p, true }, //Same series, different episodes
[TestCase(1, new[] { 5 }, "Rock", QualityTypes.Bluray1080p, true, Description = "Similar series, same season, episodes")] new object[] { 1, new[] { 6, 7, 8 }, "30 Rock", QualityTypes.Bluray1080p, true }, //Same series, different episodes
[TestCase(1, new[] { 5 }, "30 Rock", QualityTypes.Bluray720p, false, Description = "Same series, higher quality")] new object[] { 1, new[] { 6 }, "Some other show", QualityTypes.Bluray1080p, true }, //Different series, same season, episode
[TestCase(1, new[] { 5 }, "30 Rock", QualityTypes.HDTV, true, Description = "Same series, higher quality")] new object[] { 1, new[] { 5 }, "Rock", QualityTypes.Bluray1080p, true }, //Similar series, same season, episodes
new object[] { 1, new[] { 5 }, "30 Rock", QualityTypes.Bluray720p, false }, //Same series, higher quality
new object[] { 1, new[] { 5 }, "30 Rock", QualityTypes.HDTV, true } //Same series, higher quality
};
[Test, TestCaseSource("DifferentEpisodeCases")]
public void IsInQueue_should_not_find_diffrent_episode_queue(int season, int[] episodes, string title, QualityTypes qualityType, bool proper) public void IsInQueue_should_not_find_diffrent_episode_queue(int season, int[] episodes, string title, QualityTypes qualityType, bool proper)
{ {
WithFullQueue(); WithFullQueue();
@ -191,7 +196,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int>(episodes), EpisodeNumbers = new List<int>(episodes),
SeasonNumber = season, SeasonNumber = season,
Quality = new Quality { QualityType = qualityType, Proper = proper }, Quality = new QualityModel { Quality = qualityType, Proper = proper },
Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) }, Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) },
}; };
@ -200,12 +205,17 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
result.Should().BeFalse(); result.Should().BeFalse();
} }
[TestCase(1, new[] { 5 }, "30 Rock", QualityTypes.SDTV, false, Description = "Same Series, lower quality")] public static object[] LowerQualityCases =
[TestCase(1, new[] { 5 }, "30 rocK", QualityTypes.SDTV, false, Description = "Same Series, different casing")] {
[TestCase(1, new[] { 5 }, "30 RocK", QualityTypes.HDTV, false, Description = "Same Series, same quality")] new object[] { 1, new[] { 5 }, "30 Rock", QualityTypes.SDTV, false }, //Same Series, lower quality
[TestCase(1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false, Description = "Same Series, same quality, one different episode")] new object[] { 1, new[] { 5 }, "30 rocK", QualityTypes.SDTV, false }, //Same Series, different casing
[TestCase(1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false, Description = "Same Series, same quality, one different episode")] new object[] { 1, new[] { 5 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality
[TestCase(4, new[] { 8 }, "Parks and Recreation", QualityTypes.WEBDL, false, Description = "Same Series, same quality")] new object[] { 1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality, one different episode
new object[] { 1, new[] { 5, 6 }, "30 RocK", QualityTypes.HDTV, false }, //Same Series, same quality, one different episode
new object[] { 4, new[] { 8 }, "Parks and Recreation", QualityTypes.WEBDL720p }, false, //Same Series, same quality
};
[Test, TestCaseSource("LowerQualityCases")]
public void IsInQueue_should_find_same_or_lower_quality_episode_queue(int season, int[] episodes, string title, QualityTypes qualityType, bool proper) public void IsInQueue_should_find_same_or_lower_quality_episode_queue(int season, int[] episodes, string title, QualityTypes qualityType, bool proper)
{ {
WithFullQueue(); WithFullQueue();
@ -215,7 +225,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int>(episodes), EpisodeNumbers = new List<int>(episodes),
SeasonNumber = season, SeasonNumber = season,
Quality = new Quality { QualityType = qualityType, Proper = proper }, Quality = new QualityModel { Quality = qualityType, Proper = proper },
Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) }, Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) },
}; };
@ -224,10 +234,15 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
result.Should().BeTrue(); result.Should().BeTrue();
} }
[TestCase(5, new[] { 13 }, "The Big Bang Theory", QualityTypes.SDTV, false, Description = "Same Series, lower quality")] public static object[] DuplicateItemsCases =
[TestCase(5, new[] { 13 }, "The Big Bang Theory", QualityTypes.HDTV, false, Description = "Same Series, same quality")] {
[TestCase(5, new[] { 13 }, "The Big Bang Theory", QualityTypes.HDTV, true, Description = "Same Series, same quality")] new object[] { 5, new[] { 13 }, "The Big Bang Theory", QualityTypes.SDTV, false }, //Same Series, lower quality
[TestCase(5, new[] { 13, 14 }, "The Big Bang Theory", QualityTypes.HDTV, false, Description = "Same Series, same quality, one diffrent episode")] new object[] { 5, new[] { 13 }, "The Big Bang Theory", QualityTypes.HDTV, false }, //Same Series, same quality
new object[] { 5, new[] { 13 }, "The Big Bang Theory", QualityTypes.HDTV, true }, //Same Series, same quality
new object[] { 5, new[] { 13, 14 }, "The Big Bang Theory", QualityTypes.HDTV, false } //Same Series, same quality, one diffrent episode
};
[Test, TestCaseSource("DuplicateItemsCases")]
public void IsInQueue_should_find_items_marked_as_duplicate(int season, int[] episodes, string title, QualityTypes qualityType, bool proper) public void IsInQueue_should_find_items_marked_as_duplicate(int season, int[] episodes, string title, QualityTypes qualityType, bool proper)
{ {
WithFullQueue(); WithFullQueue();
@ -237,7 +252,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int>(episodes), EpisodeNumbers = new List<int>(episodes),
SeasonNumber = season, SeasonNumber = season,
Quality = new Quality { QualityType = qualityType, Proper = proper }, Quality = new QualityModel { Quality = qualityType, Proper = proper },
Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) }, Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) },
}; };
@ -246,10 +261,15 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
result.Should().BeTrue(); result.Should().BeTrue();
} }
[TestCase(3, new[] { 14, 15 }, "My Name Is Earl", QualityTypes.Bluray720p, false)] public static object[] DoubleEpisodeCases =
[TestCase(3, new[] { 15 }, "My Name Is Earl", QualityTypes.DVD, false)] {
[TestCase(3, new[] { 14 }, "My Name Is Earl", QualityTypes.HDTV, false)] new object[] { 3, new[] { 14, 15 }, "My Name Is Earl", QualityTypes.Bluray720p, false },
[TestCase(3, new[] { 15, 16 }, "My Name Is Earl", QualityTypes.SDTV, false)] new object[] { 3, new[] { 15 }, "My Name Is Earl", QualityTypes.DVD, false },
new object[] { 3, new[] { 14 }, "My Name Is Earl", QualityTypes.HDTV, false },
new object[] { 3, new[] { 15, 16 }, "My Name Is Earl", QualityTypes.SDTV, false }
};
[Test, TestCaseSource("DoubleEpisodeCases")]
public void IsInQueue_should_find_double_episodes_(int season, int[] episodes, string title, QualityTypes qualityType, bool proper) public void IsInQueue_should_find_double_episodes_(int season, int[] episodes, string title, QualityTypes qualityType, bool proper)
{ {
WithFullQueue(); WithFullQueue();
@ -259,7 +279,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int>(episodes), EpisodeNumbers = new List<int>(episodes),
SeasonNumber = season, SeasonNumber = season,
Quality = new Quality { QualityType = qualityType, Proper = proper }, Quality = new QualityModel { Quality = qualityType, Proper = proper },
Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) }, Series = new Series { Title = title, CleanTitle = Parser.NormalizeTitle(title) },
}; };
@ -278,7 +298,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests
EpisodeTitle = "Title", EpisodeTitle = "Title",
EpisodeNumbers = new List<int> { 1 }, EpisodeNumbers = new List<int> { 1 },
SeasonNumber = 2, SeasonNumber = 2,
Quality = new Quality { QualityType = QualityTypes.Bluray1080p, Proper = true }, Quality = new QualityModel { Quality = QualityTypes.Bluray1080p, Proper = true },
Series = new Series { Title = "Test", CleanTitle = Parser.NormalizeTitle("Test") }, Series = new Series { Title = "Test", CleanTitle = Parser.NormalizeTitle("Test") },
}; };

@ -20,6 +20,15 @@ namespace NzbDrone.Core.Test.ProviderTests
[TestFixture] [TestFixture]
public class DownloadProviderFixture : CoreTest public class DownloadProviderFixture : CoreTest
{ {
public static object[] SabNamingCases =
{
new object[] { 1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, false, "My Series Name - 1x02 - My Episode Title [DVD]" },
new object[] { 1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, true, "My Series Name - 1x02 - My Episode Title [DVD] [Proper]" },
new object[] { 1, new[] { 2 }, "", QualityTypes.DVD, true, "My Series Name - 1x02 - [DVD] [Proper]" },
new object[] { 1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, false, "My Series Name - 1x02-1x04 - My Episode Title [HDTV]" },
new object[] { 1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, true, "My Series Name - 1x02-1x04 - My Episode Title [HDTV] [Proper]" },
new object[] { 1, new[] { 2, 4 }, "", QualityTypes.HDTV, true, "My Series Name - 1x02-1x04 - [HDTV] [Proper]" },
};
private void SetDownloadClient(DownloadClientType clientType) private void SetDownloadClient(DownloadClientType clientType)
{ {
@ -40,7 +49,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.Setup(c => c.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(episodes); .Setup(c => c.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(episodes);
return Builder<EpisodeParseResult>.CreateNew() return Builder<EpisodeParseResult>.CreateNew()
.With(c => c.Quality = new Quality(QualityTypes.DVD, false)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, false))
.With(c => c.Series = Builder<Series>.CreateNew().Build()) .With(c => c.Series = Builder<Series>.CreateNew().Build())
.With(c => c.EpisodeNumbers = new List<int>{2}) .With(c => c.EpisodeNumbers = new List<int>{2})
.Build(); .Build();
@ -68,7 +77,6 @@ namespace NzbDrone.Core.Test.ProviderTests
.Returns(false); .Returns(false);
} }
[Test] [Test]
public void Download_report_should_send_to_sab_add_to_history_mark_as_grabbed() public void Download_report_should_send_to_sab_add_to_history_mark_as_grabbed()
{ {
@ -162,8 +170,6 @@ namespace NzbDrone.Core.Test.ProviderTests
.Verify(c => c.OnGrab(It.IsAny<String>()), Times.Never()); .Verify(c => c.OnGrab(It.IsAny<String>()), Times.Never());
} }
[Test] [Test]
public void should_return_sab_as_active_client() public void should_return_sab_as_active_client()
{ {
@ -178,14 +184,8 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.Resolve<DownloadProvider>().GetActiveDownloadClient().Should().BeAssignableTo<BlackholeProvider>(); Mocker.Resolve<DownloadProvider>().GetActiveDownloadClient().Should().BeAssignableTo<BlackholeProvider>();
} }
[Test, TestCaseSource("SabNamingCases")]
[TestCase(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, false, Result = "My Series Name - 1x02 - My Episode Title [DVD]")] public void create_proper_sab_titles(int seasons, int[] episodes, string title, QualityTypes quality, bool proper, string expected)
[TestCase(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, true, Result = "My Series Name - 1x02 - My Episode Title [DVD] [Proper]")]
[TestCase(1, new[] { 2 }, "", QualityTypes.DVD, true, Result = "My Series Name - 1x02 - [DVD] [Proper]")]
[TestCase(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, false, Result = "My Series Name - 1x02-1x04 - My Episode Title [HDTV]")]
[TestCase(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, true, Result = "My Series Name - 1x02-1x04 - My Episode Title [HDTV] [Proper]")]
[TestCase(1, new[] { 2, 4 }, "", QualityTypes.HDTV, true, Result = "My Series Name - 1x02-1x04 - [HDTV] [Proper]")]
public string create_proper_sab_titles(int seasons, int[] episodes, string title, QualityTypes quality, bool proper)
{ {
var series = Builder<Series>.CreateNew() var series = Builder<Series>.CreateNew()
.With(c => c.Title = "My Series Name") .With(c => c.Title = "My Series Name")
@ -195,13 +195,13 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
AirDate = DateTime.Now, AirDate = DateTime.Now,
EpisodeNumbers = episodes.ToList(), EpisodeNumbers = episodes.ToList(),
Quality = new Quality(quality, proper), Quality = new QualityModel(quality, proper),
SeasonNumber = seasons, SeasonNumber = seasons,
Series = series, Series = series,
EpisodeTitle = title EpisodeTitle = title
}; };
return Mocker.Resolve<DownloadProvider>().GetDownloadTitle(parsResult); Mocker.Resolve<DownloadProvider>().GetDownloadTitle(parsResult).Should().Be(expected);
} }
[TestCase(true, Result = "My Series Name - Season 1 [Bluray720p] [Proper]")] [TestCase(true, Result = "My Series Name - Season 1 [Bluray720p] [Proper]")]
@ -215,7 +215,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var parsResult = new EpisodeParseResult() var parsResult = new EpisodeParseResult()
{ {
AirDate = DateTime.Now, AirDate = DateTime.Now,
Quality = new Quality(QualityTypes.Bluray720p, proper), Quality = new QualityModel(QualityTypes.Bluray720p, proper),
SeasonNumber = 1, SeasonNumber = 1,
Series = series, Series = series,
EpisodeTitle = "My Episode Title", EpisodeTitle = "My Episode Title",
@ -237,7 +237,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var parsResult = new EpisodeParseResult var parsResult = new EpisodeParseResult
{ {
AirDate = new DateTime(2011, 12, 1), AirDate = new DateTime(2011, 12, 1),
Quality = new Quality(QualityTypes.Bluray720p, proper), Quality = new QualityModel(QualityTypes.Bluray720p, proper),
Series = series, Series = series,
EpisodeTitle = "My Episode Title", EpisodeTitle = "My Episode Title",
}; };

@ -88,7 +88,7 @@ namespace NzbDrone.Core.Test.ProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build();
@ -858,7 +858,7 @@ namespace NzbDrone.Core.Test.ProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build();
@ -902,7 +902,7 @@ namespace NzbDrone.Core.Test.ProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 1).With(e => e.EpisodeFile = fakeFile).Build();
@ -1224,6 +1224,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFile = Builder<EpisodeFile>.CreateNew() var episodeFile = Builder<EpisodeFile>.CreateNew()
.With(c => c.EpisodeFileId = 1) .With(c => c.EpisodeFileId = 1)
.With(c => c.Quality = QualityTypes.SDTV)
.Build(); .Build();
var episodes = Builder<Episode>.CreateListOfSize(2) var episodes = Builder<Episode>.CreateListOfSize(2)

@ -19,7 +19,10 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
//Setup //Setup
var historyItem = Builder<History>.CreateListOfSize(10).Build(); var historyItem = Builder<History>.CreateListOfSize(10)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.Build();
Db.InsertMany(historyItem); Db.InsertMany(historyItem);
@ -39,7 +42,15 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodes = Builder<Episode>.CreateListOfSize(10).Build(); var episodes = Builder<Episode>.CreateListOfSize(10).Build();
var historyItems = Builder<History>.CreateListOfSize(10).TheFirst(5).With(h => h.SeriesId = seriesOne.SeriesId).TheLast(5).With(h => h.SeriesId = seriesTwo.SeriesId).Build(); var historyItems = Builder<History>
.CreateListOfSize(10)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.TheFirst(5)
.With(h => h.SeriesId = seriesOne.SeriesId)
.TheLast(5)
.With(h => h.SeriesId = seriesTwo.SeriesId)
.Build();
Db.InsertMany(historyItems); Db.InsertMany(historyItems);
@ -65,7 +76,11 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var historyItem = Builder<History>.CreateListOfSize(10).Build(); var historyItem = Builder<History>
.CreateListOfSize(10)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.Build();
Db.InsertMany(historyItem); Db.InsertMany(historyItem);
//Act //Act
@ -82,6 +97,8 @@ namespace NzbDrone.Core.Test.ProviderTests
WithRealDb(); WithRealDb();
var historyItem = Builder<History>.CreateListOfSize(30) var historyItem = Builder<History>.CreateListOfSize(30)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.TheFirst(10).With(c => c.Date = DateTime.Now) .TheFirst(10).With(c => c.Date = DateTime.Now)
.TheNext(20).With(c => c.Date = DateTime.Now.AddDays(-31)) .TheNext(20).With(c => c.Date = DateTime.Now.AddDays(-31))
.Build(); .Build();
@ -129,7 +146,7 @@ namespace NzbDrone.Core.Test.ProviderTests
//Assert //Assert
result.Should().NotBeNull(); result.Should().NotBeNull();
result.QualityType.Should().Be(QualityTypes.Bluray720p); result.Quality.Should().Be(QualityTypes.Bluray720p);
result.Proper.Should().BeTrue(); result.Proper.Should().BeTrue();
} }
@ -184,7 +201,7 @@ namespace NzbDrone.Core.Test.ProviderTests
//Assert //Assert
result.Should().NotBeNull(); result.Should().NotBeNull();
result.QualityType.Should().Be(QualityTypes.Bluray720p); result.Quality.Should().Be(QualityTypes.Bluray720p);
result.Proper.Should().BeTrue(); result.Proper.Should().BeTrue();
} }
@ -195,7 +212,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var episode = Builder<Episode>.CreateNew().Build(); var episode = Builder<Episode>.CreateNew().Build();
const QualityTypes quality = QualityTypes.HDTV; QualityTypes quality = QualityTypes.HDTV;
const bool proper = true; const bool proper = true;
var history = new History var history = new History

@ -12,6 +12,7 @@ using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common.AutoMoq; using NzbDrone.Test.Common.AutoMoq;
@ -25,10 +26,14 @@ namespace NzbDrone.Core.Test.ProviderTests
public void get_series_files() public void get_series_files()
{ {
var firstSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10) var firstSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
.All().With(s => s.SeriesId = 12).Build(); .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(s => s.SeriesId = 12).Build();
var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10) var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
.All().With(s => s.SeriesId = 20).Build(); .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(s => s.SeriesId = 20).Build();
@ -51,12 +56,14 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
var firstSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10) var firstSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
.All() .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(s => s.SeriesId = 12) .With(s => s.SeriesId = 12)
.With(s => s.SeasonNumber = 1) .With(s => s.SeasonNumber = 1)
.Build(); .Build();
var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10) var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
.All() .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(s => s.SeriesId = 12) .With(s => s.SeriesId = 12)
.With(s => s.SeasonNumber = 2) .With(s => s.SeasonNumber = 2)
.Build(); .Build();
@ -143,7 +150,11 @@ namespace NzbDrone.Core.Test.ProviderTests
public void DeleteEpisodeFile() public void DeleteEpisodeFile()
{ {
//Setup //Setup
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build(); var episodeFiles = Builder<EpisodeFile>
.CreateListOfSize(10)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.Build();
var database = TestDbHelper.GetEmptyDatabase(); var database = TestDbHelper.GetEmptyDatabase();
@ -180,6 +191,7 @@ namespace NzbDrone.Core.Test.ProviderTests
//Setup //Setup
WithRealDb(); WithRealDb();
var episodeFile = Builder<EpisodeFile>.CreateNew() var episodeFile = Builder<EpisodeFile>.CreateNew()
.With(c => c.Quality = QualityTypes.SDTV)
.With(f => f.Path = path.NormalizePath()) .With(f => f.Path = path.NormalizePath())
.Build(); .Build();

@ -9,6 +9,7 @@ using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
@ -116,7 +117,11 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
public void DeleteOrphanedEpisodeFiles() public void DeleteOrphanedEpisodeFiles()
{ {
//Setup //Setup
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build(); var episodeFiles = Builder<EpisodeFile>
.CreateListOfSize(10)
.All()
.With(e => e.Quality = QualityTypes.DVD)
.Build();
var episodes = Builder<Episode>.CreateListOfSize(5).Build(); var episodes = Builder<Episode>.CreateListOfSize(5).Build();
Db.InsertMany(episodes); Db.InsertMany(episodes);

@ -29,26 +29,24 @@ namespace NzbDrone.Core.Test.ProviderTests
//Assert //Assert
var types = Mocker.Resolve<QualityTypeProvider>().All(); var types = Mocker.Resolve<QualityTypeProvider>().All();
types.Should().HaveCount(6); types.Should().HaveCount(7);
types.Should().Contain(e => e.Name == "SDTV" && e.QualityTypeId == 1); types.Should().Contain(e => e.Name == "SDTV" && e.QualityTypeId == 1);
types.Should().Contain(e => e.Name == "DVD" && e.QualityTypeId == 2); types.Should().Contain(e => e.Name == "DVD" && e.QualityTypeId == 2);
types.Should().Contain(e => e.Name == "HDTV" && e.QualityTypeId == 4); types.Should().Contain(e => e.Name == "HDTV" && e.QualityTypeId == 4);
types.Should().Contain(e => e.Name == "WEBDL" && e.QualityTypeId == 5); types.Should().Contain(e => e.Name == "WEBDL720p" && e.QualityTypeId == 5);
types.Should().Contain(e => e.Name == "WEBDL1080p" && e.QualityTypeId == 3);
types.Should().Contain(e => e.Name == "Bluray720p" && e.QualityTypeId == 6); types.Should().Contain(e => e.Name == "Bluray720p" && e.QualityTypeId == 6);
types.Should().Contain(e => e.Name == "Bluray1080p" && e.QualityTypeId == 7); types.Should().Contain(e => e.Name == "Bluray1080p" && e.QualityTypeId == 7);
} }
[Test] [Test]
public void SetupDefault_already_exists() public void SetupDefault_already_exists_should_insert_missing()
{ {
var db = TestDbHelper.GetEmptyDatabase(); var db = TestDbHelper.GetEmptyDatabase();
Mocker.SetConstant(db); Mocker.SetConstant(db);
var fakeQualityType = Builder<QualityType>.CreateNew() db.Insert(new QualityType { QualityTypeId = 1, Name = "SDTV", MinSize = 0, MaxSize = 100 });
.Build();
db.Insert(fakeQualityType);
//Act //Act
Mocker.Resolve<QualityTypeProvider>().SetupDefault(); Mocker.Resolve<QualityTypeProvider>().SetupDefault();
@ -56,7 +54,7 @@ namespace NzbDrone.Core.Test.ProviderTests
//Assert //Assert
var types = Mocker.Resolve<QualityTypeProvider>().All(); var types = Mocker.Resolve<QualityTypeProvider>().All();
types.Should().HaveCount(1); types.Should().HaveCount(7);
} }
[Test] [Test]

@ -37,6 +37,8 @@ namespace NzbDrone.Core.Test.ProviderTests
.Build(); .Build();
var items = Builder<SearchHistoryItem>.CreateListOfSize(10) var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
.All()
.With(c => c.Quality = QualityTypes.SDTV)
.Build().ToList(); .Build().ToList();
_searchHistory = Builder<SearchHistory>.CreateNew() _searchHistory = Builder<SearchHistory>.CreateNew()
@ -77,6 +79,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
var items = Builder<SearchHistoryItem>.CreateListOfSize(10) var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
.All() .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(i => i.Id == searchHistory.Id) .With(i => i.Id == searchHistory.Id)
.Build(); .Build();
@ -97,6 +100,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
var items = Builder<SearchHistoryItem>.CreateListOfSize(10) var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
.All() .All()
.With(c => c.Quality = QualityTypes.SDTV)
.With(i => i.Id == searchHistory.Id) .With(i => i.Id == searchHistory.Id)
.Build(); .Build();

@ -93,16 +93,16 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(c => c.AirDate = DateTime.Today) .With(c => c.AirDate = DateTime.Today)
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.Random(1) .Random(1)
.With(c => c.Quality = new Quality(QualityTypes.Bluray1080p, true)) .With(c => c.Quality = new QualityModel(QualityTypes.Bluray1080p, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
WithSuccessfulDownload(); WithSuccessfulDownload();
Mocker.GetMock<AllowedDownloadSpecification>() Mocker.GetMock<AllowedDownloadSpecification>()
.Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.Bluray1080p))) .Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.Bluray1080p)))
.Returns(ReportRejectionType.None); .Returns(ReportRejectionType.None);
//Act //Act
@ -123,7 +123,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(c => c.AirDate = DateTime.Today) .With(c => c.AirDate = DateTime.Today)
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -147,7 +147,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(e => e.AirDate = DateTime.Today) .With(e => e.AirDate = DateTime.Today)
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithNullSeries(); WithNullSeries();
@ -168,7 +168,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(e => e.AirDate = DateTime.Today) .With(e => e.AirDate = DateTime.Today)
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMisMatchedSeries(); WithMisMatchedSeries();
@ -189,7 +189,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2)
.All() .All()
.With(e => e.AirDate = DateTime.Today) .With(e => e.AirDate = DateTime.Today)
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -212,20 +212,20 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2)
.All() .All()
.With(e => e.AirDate = DateTime.Today) .With(e => e.AirDate = DateTime.Today)
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.TheLast(1) .TheLast(1)
.With(c => c.Quality = new Quality(QualityTypes.SDTV, true)) .With(c => c.Quality = new QualityModel(QualityTypes.SDTV, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
WithQualityNeeded(); WithQualityNeeded();
Mocker.GetMock<DownloadProvider>() Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.DVD))) .Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.DVD)))
.Returns(false); .Returns(false);
Mocker.GetMock<DownloadProvider>() Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.SDTV))) .Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.SDTV)))
.Returns(true); .Returns(true);
//Act //Act
@ -244,7 +244,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(e => e.AirDate = null) .With(e => e.AirDate = null)
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -265,7 +265,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5) var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All() .All()
.With(e => e.AirDate = DateTime.Today.AddDays(10)) .With(e => e.AirDate = DateTime.Today.AddDays(10))
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();

@ -91,10 +91,10 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.With(c => c.Age = 10) .With(c => c.Age = 10)
.Random(1) .Random(1)
.With(c => c.Quality = new Quality(QualityTypes.Bluray1080p, true)) .With(c => c.Quality = new QualityModel(QualityTypes.Bluray1080p, true))
.With(c => c.Age = 100) .With(c => c.Age = 100)
.Build(); .Build();
@ -102,7 +102,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
WithSuccessfulDownload(); WithSuccessfulDownload();
Mocker.GetMock<AllowedDownloadSpecification>() Mocker.GetMock<AllowedDownloadSpecification>()
.Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.Bluray1080p))) .Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.Bluray1080p)))
.Returns(ReportRejectionType.None); .Returns(ReportRejectionType.None);
//Act //Act
@ -125,7 +125,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(c => c.Quality = new Quality(QualityTypes.Bluray1080p, true)) .With(c => c.Quality = new QualityModel(QualityTypes.Bluray1080p, true))
.With(c => c.Age = 300) .With(c => c.Age = 300)
.Build(); .Build();
@ -157,7 +157,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -183,7 +183,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithNullSeries(); WithNullSeries();
@ -206,7 +206,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMisMatchedSeries(); WithMisMatchedSeries();
@ -229,7 +229,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 2) .With(e => e.SeasonNumber = 2)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -252,7 +252,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 2 }) .With(e => e.EpisodeNumbers = new List<int> { 2 })
.With(e => e.Quality = new Quality(QualityTypes.HDTV, false)) .With(e => e.Quality = new QualityModel(QualityTypes.HDTV, false))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
@ -275,7 +275,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 5 }) .With(e => e.EpisodeNumbers = new List<int> { 5 })
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.TheLast(1) .TheLast(1)
.With(e => e.EpisodeNumbers = new List<int> { 1, 2, 3, 4, 5 }) .With(e => e.EpisodeNumbers = new List<int> { 1, 2, 3, 4, 5 })
.Build(); .Build();
@ -302,20 +302,20 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.TheLast(1) .TheLast(1)
.With(c => c.Quality = new Quality(QualityTypes.SDTV, true)) .With(c => c.Quality = new QualityModel(QualityTypes.SDTV, true))
.Build(); .Build();
WithMatchingSeries(); WithMatchingSeries();
WithQualityNeeded(); WithQualityNeeded();
Mocker.GetMock<DownloadProvider>() Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.DVD))) .Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.DVD)))
.Returns(false); .Returns(false);
Mocker.GetMock<DownloadProvider>() Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.SDTV))) .Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.SDTV)))
.Returns(true); .Returns(true);
//Act //Act
@ -336,10 +336,10 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
.All() .All()
.With(e => e.SeasonNumber = 1) .With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 }) .With(e => e.EpisodeNumbers = new List<int> { 1 })
.With(c => c.Quality = new Quality(QualityTypes.DVD, true)) .With(c => c.Quality = new QualityModel(QualityTypes.DVD, true))
.With(c => c.Age = 10) .With(c => c.Age = 10)
.Random(1) .Random(1)
.With(c => c.Quality = new Quality(QualityTypes.Bluray1080p, true)) .With(c => c.Quality = new QualityModel(QualityTypes.Bluray1080p, true))
.With(c => c.Age = 100) .With(c => c.Age = 100)
.Build(); .Build();
@ -349,7 +349,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests
WithSuccessfulDownload(); WithSuccessfulDownload();
Mocker.GetMock<AllowedDownloadSpecification>() Mocker.GetMock<AllowedDownloadSpecification>()
.Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.QualityType == QualityTypes.Bluray1080p))) .Setup(s => s.IsSatisfiedBy(It.Is<EpisodeParseResult>(d => d.Quality.Quality == QualityTypes.Bluray1080p)))
.Returns(ReportRejectionType.None); .Returns(ReportRejectionType.None);
//Act //Act

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using FizzWare.NBuilder; using FizzWare.NBuilder;
@ -16,6 +17,19 @@ namespace NzbDrone.Core.Test.ProviderTests
[TestFixture] [TestFixture]
public class SeriesProviderTest : CoreTest public class SeriesProviderTest : CoreTest
{ {
private IList<QualityProfile> _qualityProfiles;
[SetUp]
public void Setup()
{
_qualityProfiles = Builder<QualityProfile>
.CreateListOfSize(2)
.All()
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build();
}
[TestCase(true)] [TestCase(true)]
[TestCase(false)] [TestCase(false)]
public void Add_new_series(bool useSeasonFolder) public void Add_new_series(bool useSeasonFolder)
@ -25,7 +39,12 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<ConfigProvider>() Mocker.GetMock<ConfigProvider>()
.Setup(c => c.UseSeasonFolder).Returns(useSeasonFolder); .Setup(c => c.UseSeasonFolder).Returns(useSeasonFolder);
var fakeProfiles = Builder<QualityProfile>.CreateListOfSize(2).Build(); var fakeProfiles = Builder<QualityProfile>
.CreateListOfSize(2)
.All()
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build();
Db.InsertMany(fakeProfiles); Db.InsertMany(fakeProfiles);
@ -96,7 +115,12 @@ namespace NzbDrone.Core.Test.ProviderTests
.With(c => c.EpisodeFileCount = 0) .With(c => c.EpisodeFileCount = 0)
.With(c => c.SeasonCount = 0) .With(c => c.SeasonCount = 0)
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build();
var fakeQuality = Builder<QualityProfile>
.CreateNew()
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build();
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -121,7 +145,12 @@ namespace NzbDrone.Core.Test.ProviderTests
.With(c => c.QualityProfileId = 1) .With(c => c.QualityProfileId = 1)
.With(c => c.CleanTitle = "laworder") .With(c => c.CleanTitle = "laworder")
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build();
var fakeQuality = Builder<QualityProfile>
.CreateNew()
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build();
var id = Db.Insert(fakeSeries); var id = Db.Insert(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -168,6 +197,8 @@ namespace NzbDrone.Core.Test.ProviderTests
var fakeQuality = Builder<QualityProfile>.CreateNew() var fakeQuality = Builder<QualityProfile>.CreateNew()
.With(c => c.QualityProfileId = fakeSeries.QualityProfileId) .With(c => c.QualityProfileId = fakeSeries.QualityProfileId)
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build(); .Build();
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
@ -197,7 +228,11 @@ namespace NzbDrone.Core.Test.ProviderTests
.With(c => c.SeriesId = 11) .With(c => c.SeriesId = 11)
.Build()); .Build());
Db.InsertMany(Builder<QualityProfile>.CreateListOfSize(3).Build()); Db.InsertMany(Builder<QualityProfile>.CreateListOfSize(3)
.All()
.With(p => p.Cutoff = QualityTypes.DVD)
.With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD })
.Build());
//Act, Assert //Act, Assert
var provider = Mocker.Resolve<SeriesProvider>(); var provider = Mocker.Resolve<SeriesProvider>();
@ -211,7 +246,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10) var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
.All().With(e => e.SeriesId = fakeSeries.SeriesId) .All().With(e => e.SeriesId = fakeSeries.SeriesId)
@ -242,7 +277,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10).All().With(e => e.SeriesId = fakeSeries.SeriesId).With(e => e.Ignored = true).Random(5).With(e => e.EpisodeFileId = 0).Build(); var fakeEpisodes = Builder<Episode>.CreateListOfSize(10).All().With(e => e.SeriesId = fakeSeries.SeriesId).With(e => e.Ignored = true).Random(5).With(e => e.EpisodeFileId = 0).Build();
@ -265,7 +300,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10) var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
.All() .All()
@ -293,7 +328,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10) var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
.All() .All()
@ -324,7 +359,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(5) var fakeSeries = Builder<Series>.CreateListOfSize(5)
.All() .All()
@ -360,7 +395,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew() var fakeSeries = Builder<Series>.CreateNew()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
.With(e => e.SeriesId = 1) .With(e => e.SeriesId = 1)
@ -391,7 +426,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.TheFirst(1) .TheFirst(1)
.With(c => c.Path = path) .With(c => c.Path = path)
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
Db.InsertMany(fakeSeries); Db.InsertMany(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -420,7 +455,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.TheFirst(1) .TheFirst(1)
.With(c => c.Path = path) .With(c => c.Path = path)
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
Db.InsertMany(fakeSeries); Db.InsertMany(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -449,7 +484,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.TheFirst(1) .TheFirst(1)
.With(c => c.Path = path) .With(c => c.Path = path)
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
Db.InsertMany(fakeSeries); Db.InsertMany(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -478,7 +513,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.TheFirst(1) .TheFirst(1)
.With(c => c.Path = path) .With(c => c.Path = path)
.Build(); .Build();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
Db.InsertMany(fakeSeries); Db.InsertMany(fakeSeries);
Db.Insert(fakeQuality); Db.Insert(fakeQuality);
@ -499,7 +534,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2) var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All() .All()
@ -528,7 +563,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2) var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All() .All()
@ -557,7 +592,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2) var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All() .All()
@ -584,7 +619,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2) var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All() .All()
@ -613,7 +648,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build(); var fakeSeries = Builder<Series>.CreateNew().With(e => e.QualityProfileId = fakeQuality.QualityProfileId).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(2) var fakeEpisodes = Builder<Episode>.CreateListOfSize(2)
.All() .All()
@ -643,7 +678,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(10) var fakeSeries = Builder<Series>.CreateListOfSize(10)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -664,7 +699,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(10) var fakeSeries = Builder<Series>.CreateListOfSize(10)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -685,7 +720,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(10) var fakeSeries = Builder<Series>.CreateListOfSize(10)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -706,7 +741,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(10) var fakeSeries = Builder<Series>.CreateListOfSize(10)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -727,7 +762,7 @@ namespace NzbDrone.Core.Test.ProviderTests
{ {
WithRealDb(); WithRealDb();
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(10) var fakeSeries = Builder<Series>.CreateListOfSize(10)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -753,7 +788,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var newMonitored = false; var newMonitored = false;
var newSeasonFolder = false; var newSeasonFolder = false;
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(1) var fakeSeries = Builder<Series>.CreateListOfSize(1)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)
@ -790,7 +825,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var monitored = true; var monitored = true;
var seasonFolder = true; var seasonFolder = true;
var fakeQuality = Builder<QualityProfile>.CreateNew().Build(); var fakeQuality = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
var fakeSeries = Builder<Series>.CreateListOfSize(2) var fakeSeries = Builder<Series>.CreateListOfSize(2)
.All() .All()
.With(e => e.QualityProfileId = fakeQuality.QualityProfileId) .With(e => e.QualityProfileId = fakeQuality.QualityProfileId)

@ -155,7 +155,7 @@ namespace NzbDrone.Core.Test
var db = TestDbHelper.GetEmptyDatabase(); var db = TestDbHelper.GetEmptyDatabase();
Mocker.SetConstant(db); Mocker.SetConstant(db);
var fakeProfile = Builder<QualityProfile>.CreateNew().Build(); var fakeProfile = Builder<QualityProfile>.CreateNew().With(p => p.Cutoff = QualityTypes.DVD).With(p => p.Allowed = new List<QualityTypes> { QualityTypes.SDTV, QualityTypes.DVD }).Build();
//Act //Act
Mocker.Resolve<QualityProvider>().Add(fakeProfile); Mocker.Resolve<QualityProvider>().Add(fakeProfile);

@ -13,8 +13,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void Icomparer_greater_test() public void Icomparer_greater_test()
{ {
var first = new Quality(QualityTypes.DVD, true); var first = new QualityModel(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
second.Should().BeGreaterThan(first); second.Should().BeGreaterThan(first);
} }
@ -22,8 +22,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void Icomparer_greater_proper() public void Icomparer_greater_proper()
{ {
var first = new Quality(QualityTypes.Bluray1080p, false); var first = new QualityModel(QualityTypes.Bluray1080p, false);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
second.Should().BeGreaterThan(first); second.Should().BeGreaterThan(first);
} }
@ -31,8 +31,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void Icomparer_lesser() public void Icomparer_lesser()
{ {
var first = new Quality(QualityTypes.DVD, true); var first = new QualityModel(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
first.Should().BeLessThan(second); first.Should().BeLessThan(second);
} }
@ -40,8 +40,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void Icomparer_lesser_proper() public void Icomparer_lesser_proper()
{ {
var first = new Quality(QualityTypes.DVD, false); var first = new QualityModel(QualityTypes.DVD, false);
var second = new Quality(QualityTypes.DVD, true); var second = new QualityModel(QualityTypes.DVD, true);
first.Should().BeLessThan(second); first.Should().BeLessThan(second);
} }
@ -49,8 +49,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void equal_operand() public void equal_operand()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
(first == second).Should().BeTrue(); (first == second).Should().BeTrue();
(first >= second).Should().BeTrue(); (first >= second).Should().BeTrue();
@ -60,8 +60,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void equal_operand_false() public void equal_operand_false()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Unknown, true); var second = new QualityModel(QualityTypes.Unknown, true);
(first == second).Should().BeFalse(); (first == second).Should().BeFalse();
} }
@ -69,18 +69,17 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void equal_operand_false_proper() public void equal_operand_false_proper()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Bluray1080p, false); var second = new QualityModel(QualityTypes.Bluray1080p, false);
(first == second).Should().BeFalse(); (first == second).Should().BeFalse();
} }
[Test] [Test]
public void not_equal_operand() public void not_equal_operand()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
(first != second).Should().BeFalse(); (first != second).Should().BeFalse();
} }
@ -88,8 +87,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void not_equal_operand_false() public void not_equal_operand_false()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Unknown, true); var second = new QualityModel(QualityTypes.Unknown, true);
(first != second).Should().BeTrue(); (first != second).Should().BeTrue();
} }
@ -97,8 +96,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void not_equal_operand_false_proper() public void not_equal_operand_false_proper()
{ {
var first = new Quality(QualityTypes.Bluray1080p, true); var first = new QualityModel(QualityTypes.Bluray1080p, true);
var second = new Quality(QualityTypes.Bluray1080p, false); var second = new QualityModel(QualityTypes.Bluray1080p, false);
(first != second).Should().BeTrue(); (first != second).Should().BeTrue();
} }
@ -106,8 +105,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void greater_operand() public void greater_operand()
{ {
var first = new Quality(QualityTypes.DVD, true); var first = new QualityModel(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
(first < second).Should().BeTrue(); (first < second).Should().BeTrue();
(first <= second).Should().BeTrue(); (first <= second).Should().BeTrue();
@ -116,8 +115,8 @@ namespace NzbDrone.Core.Test
[Test] [Test]
public void lesser_operand() public void lesser_operand()
{ {
var first = new Quality(QualityTypes.DVD, true); var first = new QualityModel(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true); var second = new QualityModel(QualityTypes.Bluray1080p, true);
(second > first).Should().BeTrue(); (second > first).Should().BeTrue();
(second >= first).Should().BeTrue(); (second >= first).Should().BeTrue();

@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.IO;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test
{
[TestFixture]
// ReSharper disable InconsistentNaming
public class QualityTypesTest : CoreTest
{
public static object[] FromIntCases =
{
new object[] {1, QualityTypes.SDTV},
new object[] {2, QualityTypes.DVD},
new object[] {4, QualityTypes.HDTV},
new object[] {5, QualityTypes.WEBDL720p},
new object[] {6, QualityTypes.Bluray720p},
new object[] {7, QualityTypes.Bluray1080p}
};
public static object[] ToIntCases =
{
new object[] {QualityTypes.SDTV, 1},
new object[] {QualityTypes.DVD, 2},
new object[] {QualityTypes.HDTV, 4},
new object[] {QualityTypes.WEBDL720p, 5},
new object[] {QualityTypes.Bluray720p, 6},
new object[] {QualityTypes.Bluray1080p, 7}
};
[Test, TestCaseSource("FromIntCases")]
public void should_be_able_to_convert_int_to_qualityTypes(int source, QualityTypes expected)
{
var quality = (QualityTypes)source;
quality.Should().Be(expected);
}
[Test, TestCaseSource("ToIntCases")]
public void should_be_able_to_convert_qualityTypes_to_int(QualityTypes source, int expected)
{
var i = (int)source;
i.Should().Be(expected);
}
[Test]
public void Icomparer_greater_test()
{
var first = QualityTypes.DVD;
var second = QualityTypes.Bluray1080p;
second.Should().BeGreaterThan(first);
}
[Test]
public void Icomparer_lesser()
{
var first = QualityTypes.DVD;
var second = QualityTypes.Bluray1080p;
first.Should().BeLessThan(second);
}
[Test]
public void equal_operand()
{
var first = QualityTypes.Bluray1080p;
var second = QualityTypes.Bluray1080p;
(first == second).Should().BeTrue();
(first >= second).Should().BeTrue();
(first <= second).Should().BeTrue();
}
[Test]
public void equal_operand_false()
{
var first = QualityTypes.Bluray1080p;
var second = QualityTypes.Unknown;
(first == second).Should().BeFalse();
}
[Test]
public void not_equal_operand()
{
var first = QualityTypes.Bluray1080p;
var second = QualityTypes.Bluray1080p;
(first != second).Should().BeFalse();
}
[Test]
public void not_equal_operand_false()
{
var first = QualityTypes.Bluray1080p;
var second = QualityTypes.Unknown;
(first != second).Should().BeTrue();
}
[Test]
public void greater_operand()
{
var first = QualityTypes.DVD;
var second = QualityTypes.Bluray1080p;
(first < second).Should().BeTrue();
(first <= second).Should().BeTrue();
}
[Test]
public void lesser_operand()
{
var first = QualityTypes.DVD;
var second = QualityTypes.Bluray1080p;
(second > first).Should().BeTrue();
(second >= first).Should().BeTrue();
}
}
}

@ -1,14 +1,28 @@
using System; using System;
using System.Reflection; using System.Reflection;
using NzbDrone.Core.Repository.Quality;
using PetaPoco; using PetaPoco;
namespace NzbDrone.Core.Datastore namespace NzbDrone.Core.Datastore
{ {
public class CustomeMapper : DefaultMapper public class CustomeMapper : DefaultMapper
{ {
public override Func<object, object> GetFromDbConverter(Type destinationType, Type sourceType) public override Func<object, object> GetToDbConverter(Type sourceType)
{
if (sourceType == typeof(QualityTypes))
{ {
return delegate(object s)
{
var source = (QualityTypes)s;
return source.Id;
};
}
return base.GetToDbConverter(sourceType);
}
public override Func<object, object> GetFromDbConverter(Type destinationType, Type sourceType)
{
if ((sourceType == typeof(Int32) || sourceType == typeof(Int64)) && destinationType.IsGenericType && destinationType.GetGenericTypeDefinition() == typeof(Nullable<>)) if ((sourceType == typeof(Int32) || sourceType == typeof(Int64)) && destinationType.IsGenericType && destinationType.GetGenericTypeDefinition() == typeof(Nullable<>))
{ {
// If it is NULLABLE, then get the underlying type. eg if "Nullable<int>" then this will return just "int" // If it is NULLABLE, then get the underlying type. eg if "Nullable<int>" then this will return just "int"
@ -31,6 +45,17 @@ namespace NzbDrone.Core.Datastore
}; };
} }
if ((sourceType == typeof(Int32) || sourceType == typeof(Int64)) && destinationType == typeof(QualityTypes))
{
return delegate(object s)
{
int value;
Int32.TryParse(s.ToString(), out value);
var quality = (QualityTypes)value;
return quality;
};
}
return base.GetFromDbConverter(destinationType, sourceType); return base.GetFromDbConverter(destinationType, sourceType);
} }

@ -24,7 +24,7 @@ namespace NzbDrone.Core.Model
public DateTime? AirDate { get; set; } public DateTime? AirDate { get; set; }
public Quality Quality { get; set; } public QualityModel Quality { get; set; }
public LanguageType Language { get; set; } public LanguageType Language { get; set; }

@ -3,29 +3,29 @@ using NzbDrone.Core.Repository.Quality;
namespace NzbDrone.Core.Model namespace NzbDrone.Core.Model
{ {
public class Quality : IComparable<Quality> public class QualityModel : IComparable<QualityModel>
{ {
public QualityTypes QualityType { get; set; } public QualityTypes Quality { get; set; }
public Boolean Proper { get; set; } public Boolean Proper { get; set; }
public Quality() { } public QualityModel() { }
public Quality(QualityTypes quality, Boolean proper) public QualityModel(QualityTypes quality, Boolean proper)
{ {
QualityType = quality; Quality = quality;
Proper = proper; Proper = proper;
} }
public int CompareTo(Quality other) public int CompareTo(QualityModel other)
{ {
if (other.QualityType > QualityType) if (other.Quality > Quality)
return -1; return -1;
if (other.QualityType < QualityType) if (other.Quality < Quality)
return 1; return 1;
if (other.QualityType == QualityType && other.Proper == Proper) if (other.Quality == Quality && other.Proper == Proper)
return 0; return 0;
if (Proper && !other.Proper) if (Proper && !other.Proper)
@ -37,12 +37,12 @@ namespace NzbDrone.Core.Model
return 0; return 0;
} }
public static bool operator !=(Quality x, Quality y) public static bool operator !=(QualityModel x, QualityModel y)
{ {
return !(x == y); return !(x == y);
} }
public static bool operator ==(Quality x, Quality y) public static bool operator ==(QualityModel x, QualityModel y)
{ {
var xObj = (Object)x; var xObj = (Object)x;
var yObj = (object)y; var yObj = (object)y;
@ -55,29 +55,29 @@ namespace NzbDrone.Core.Model
return x.CompareTo(y) == 0; return x.CompareTo(y) == 0;
} }
public static bool operator >(Quality x, Quality y) public static bool operator >(QualityModel x, QualityModel y)
{ {
return x.CompareTo(y) > 0; return x.CompareTo(y) > 0;
} }
public static bool operator <(Quality x, Quality y) public static bool operator <(QualityModel x, QualityModel y)
{ {
return x.CompareTo(y) < 1; return x.CompareTo(y) < 0;
} }
public static bool operator <=(Quality x, Quality y) public static bool operator <=(QualityModel x, QualityModel y)
{ {
return x.CompareTo(y) <= 0; return x.CompareTo(y) <= 0;
} }
public static bool operator >=(Quality x, Quality y) public static bool operator >=(QualityModel x, QualityModel y)
{ {
return x.CompareTo(y) >= 0; return x.CompareTo(y) >= 0;
} }
public override string ToString() public override string ToString()
{ {
string result = QualityType.ToString(); string result = Quality.ToString();
if (Proper) if (Proper)
{ {
result += " [proper]"; result += " [proper]";
@ -92,24 +92,24 @@ namespace NzbDrone.Core.Model
{ {
int hash = 17; int hash = 17;
hash = hash * 23 + Proper.GetHashCode(); hash = hash * 23 + Proper.GetHashCode();
hash = hash * 23 + QualityType.GetHashCode(); hash = hash * 23 + Quality.GetHashCode();
return hash; return hash;
} }
} }
public bool Equals(Quality other) public bool Equals(QualityModel other)
{ {
if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true; if (ReferenceEquals(this, other)) return true;
return Equals(other.QualityType, QualityType) && other.Proper.Equals(Proper); return Equals(other.Quality, Quality) && other.Proper.Equals(Proper);
} }
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true; if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (Quality)) return false; if (obj.GetType() != typeof (QualityModel)) return false;
return Equals((Quality) obj); return Equals((QualityModel) obj);
} }
} }
} }

@ -6,7 +6,7 @@
internal int SeasonNumber { get; set; } internal int SeasonNumber { get; set; }
internal int Year { get; set; } internal int Year { get; set; }
public Quality Quality { get; set; } public QualityModel Quality { get; set; }
public override string ToString() public override string ToString()
{ {

@ -273,7 +273,7 @@
<Compile Include="Model\JobQueueItem.cs" /> <Compile Include="Model\JobQueueItem.cs" />
<Compile Include="Model\LanguageType.cs" /> <Compile Include="Model\LanguageType.cs" />
<Compile Include="Model\MisnamedEpisodeModel.cs" /> <Compile Include="Model\MisnamedEpisodeModel.cs" />
<Compile Include="Model\Quality.cs" /> <Compile Include="Model\QualityModel.cs" />
<Compile Include="Model\Sabnzbd\SabHistoryItem.cs" /> <Compile Include="Model\Sabnzbd\SabHistoryItem.cs" />
<Compile Include="Model\Sabnzbd\SabHistory.cs" /> <Compile Include="Model\Sabnzbd\SabHistory.cs" />
<Compile Include="Model\Sabnzbd\SabJsonError.cs" /> <Compile Include="Model\Sabnzbd\SabJsonError.cs" />
@ -330,6 +330,7 @@
<Compile Include="Jobs\UpdateInfoJob.cs" /> <Compile Include="Jobs\UpdateInfoJob.cs" />
<Compile Include="Providers\StatsProvider.cs" /> <Compile Include="Providers\StatsProvider.cs" />
<Compile Include="Repository\MetadataDefinition.cs" /> <Compile Include="Repository\MetadataDefinition.cs" />
<Compile Include="Repository\Quality\QualityTypes.cs" />
<Compile Include="Repository\Search\SearchHistoryItem.cs" /> <Compile Include="Repository\Search\SearchHistoryItem.cs" />
<Compile Include="Repository\Search\SearchHistory.cs" /> <Compile Include="Repository\Search\SearchHistory.cs" />
<Compile Include="Model\ReportRejectionType.cs" /> <Compile Include="Model\ReportRejectionType.cs" />
@ -541,7 +542,6 @@
<Compile Include="Repository\Quality\QualityType.cs" /> <Compile Include="Repository\Quality\QualityType.cs" />
<Compile Include="Repository\Quality\QualityProfile.cs" /> <Compile Include="Repository\Quality\QualityProfile.cs" />
<Compile Include="Repository\RootDir.cs" /> <Compile Include="Repository\RootDir.cs" />
<Compile Include="Repository\Quality\QualityTypes.cs" />
<Compile Include="Repository\SceneMapping.cs" /> <Compile Include="Repository\SceneMapping.cs" />
<Compile Include="Repository\Series.cs" /> <Compile Include="Repository\Series.cs" />
<Compile Include="CentralDispatch.cs" /> <Compile Include="CentralDispatch.cs" />

@ -253,18 +253,18 @@ namespace NzbDrone.Core
return NormalizeTitle(title); return NormalizeTitle(title);
} }
internal static Quality ParseQuality(string name) internal static QualityModel ParseQuality(string name)
{ {
Logger.Trace("Trying to parse quality for {0}", name); Logger.Trace("Trying to parse quality for {0}", name);
name = name.Trim(); name = name.Trim();
var normalizedName = NormalizeTitle(name); var normalizedName = NormalizeTitle(name);
var result = new Quality { QualityType = QualityTypes.Unknown }; var result = new QualityModel { Quality = QualityTypes.Unknown };
result.Proper = (normalizedName.Contains("proper") || normalizedName.Contains("repack")); result.Proper = (normalizedName.Contains("proper") || normalizedName.Contains("repack"));
if (normalizedName.Contains("dvd") || normalizedName.Contains("bdrip") || normalizedName.Contains("brrip")) if (normalizedName.Contains("dvd") || normalizedName.Contains("bdrip") || normalizedName.Contains("brrip"))
{ {
result.QualityType = QualityTypes.DVD; result.Quality = QualityTypes.DVD;
return result; return result;
} }
@ -272,11 +272,11 @@ namespace NzbDrone.Core
{ {
if (normalizedName.Contains("bluray")) if (normalizedName.Contains("bluray"))
{ {
result.QualityType = QualityTypes.DVD; result.Quality = QualityTypes.DVD;
return result; return result;
} }
result.QualityType = QualityTypes.SDTV; result.Quality = QualityTypes.SDTV;
return result; return result;
} }
@ -284,32 +284,37 @@ namespace NzbDrone.Core
{ {
if (normalizedName.Contains("720p")) if (normalizedName.Contains("720p"))
{ {
result.QualityType = QualityTypes.Bluray720p; result.Quality = QualityTypes.Bluray720p;
return result; return result;
} }
if (normalizedName.Contains("1080p")) if (normalizedName.Contains("1080p"))
{ {
result.QualityType = QualityTypes.Bluray1080p; result.Quality = QualityTypes.Bluray1080p;
return result; return result;
} }
result.QualityType = QualityTypes.Bluray720p; result.Quality = QualityTypes.Bluray720p;
return result; return result;
} }
if (normalizedName.Contains("webdl")) if (normalizedName.Contains("webdl"))
{ {
result.QualityType = QualityTypes.WEBDL; if (normalizedName.Contains("1080p"))
{
result.Quality = QualityTypes.WEBDL1080p;
return result;
}
result.Quality = QualityTypes.WEBDL720p;
return result; return result;
} }
if (normalizedName.Contains("x264") || normalizedName.Contains("h264") || normalizedName.Contains("720p")) if (normalizedName.Contains("x264") || normalizedName.Contains("h264") || normalizedName.Contains("720p"))
{ {
result.QualityType = QualityTypes.HDTV; result.Quality = QualityTypes.HDTV;
return result; return result;
} }
//Based on extension //Based on extension
if (result.QualityType == QualityTypes.Unknown) if (result.Quality == QualityTypes.Unknown)
{ {
try try
{ {
@ -330,13 +335,13 @@ namespace NzbDrone.Core
case ".ogm": case ".ogm":
case ".strm": case ".strm":
{ {
result.QualityType = QualityTypes.SDTV; result.Quality = QualityTypes.SDTV;
break; break;
} }
case ".mkv": case ".mkv":
case ".ts": case ".ts":
{ {
result.QualityType = QualityTypes.HDTV; result.Quality = QualityTypes.HDTV;
break; break;
} }
} }
@ -350,15 +355,15 @@ namespace NzbDrone.Core
if (name.Contains("[HDTV]")) if (name.Contains("[HDTV]"))
{ {
result.QualityType = QualityTypes.HDTV; result.Quality = QualityTypes.HDTV;
return result; return result;
} }
if ((normalizedName.Contains("sdtv") || normalizedName.Contains("pdtv") || if ((normalizedName.Contains("sdtv") || normalizedName.Contains("pdtv") ||
(result.QualityType == QualityTypes.Unknown && normalizedName.Contains("hdtv"))) && (result.Quality == QualityTypes.Unknown && normalizedName.Contains("hdtv"))) &&
!normalizedName.Contains("mpeg")) !normalizedName.Contains("mpeg"))
{ {
result.QualityType = QualityTypes.SDTV; result.Quality = QualityTypes.SDTV;
return result; return result;
} }

@ -26,7 +26,7 @@ namespace NzbDrone.Core.Providers.DecisionEngine
public virtual bool IsSatisfiedBy(EpisodeParseResult subject) public virtual bool IsSatisfiedBy(EpisodeParseResult subject)
{ {
logger.Trace("Beginning size check for: {0}", subject); logger.Trace("Beginning size check for: {0}", subject);
var qualityType = _qualityTypeProvider.Get((int)subject.Quality.QualityType); var qualityType = _qualityTypeProvider.Get((int)subject.Quality.Quality);
//Need to determine if this is a 30 or 60 minute episode //Need to determine if this is a 30 or 60 minute episode
//Is it a multi-episode release? //Is it a multi-episode release?

@ -11,7 +11,7 @@ namespace NzbDrone.Core.Providers.DecisionEngine
public virtual bool IsSatisfiedBy(EpisodeParseResult subject) public virtual bool IsSatisfiedBy(EpisodeParseResult subject)
{ {
logger.Trace("Checking if report meets quality requirements. {0}", subject.Quality); logger.Trace("Checking if report meets quality requirements. {0}", subject.Quality);
if (!subject.Series.QualityProfile.Allowed.Contains(subject.Quality.QualityType)) if (!subject.Series.QualityProfile.Allowed.Contains(subject.Quality.Quality))
{ {
logger.Trace("Quality {0} rejected by Series' quality profile", subject.Quality); logger.Trace("Quality {0} rejected by Series' quality profile", subject.Quality);
return false; return false;

@ -9,7 +9,7 @@ namespace NzbDrone.Core.Providers.DecisionEngine
{ {
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public virtual bool IsSatisfiedBy(Quality currentQuality, Quality newQuality, QualityTypes cutOff) public virtual bool IsSatisfiedBy(QualityModel currentQuality, QualityModel newQuality, QualityTypes cutOff)
{ {
if (currentQuality >= newQuality) if (currentQuality >= newQuality)
{ {
@ -17,13 +17,13 @@ namespace NzbDrone.Core.Providers.DecisionEngine
return false; return false;
} }
if (currentQuality.QualityType == newQuality.QualityType && newQuality.Proper) if (currentQuality.Quality == newQuality.Quality && newQuality.Proper)
{ {
logger.Trace("Upgrading existing item to proper."); logger.Trace("Upgrading existing item to proper.");
return true; return true;
} }
if (currentQuality.QualityType >= cutOff) if (currentQuality.Quality >= cutOff)
{ {
logger.Trace("Existing item meets cut-off. skipping."); logger.Trace("Existing item meets cut-off. skipping.");
return false; return false;

@ -27,7 +27,7 @@ namespace NzbDrone.Core.Providers.DecisionEngine
foreach (var file in _episodeProvider.GetEpisodesByParseResult(subject).Select(c => c.EpisodeFile).Where(c => c != null)) foreach (var file in _episodeProvider.GetEpisodesByParseResult(subject).Select(c => c.EpisodeFile).Where(c => c != null))
{ {
logger.Trace("Comparing file quality with report. Existing file is {0} proper:{1}", file.Quality, file.Proper); logger.Trace("Comparing file quality with report. Existing file is {0} proper:{1}", file.Quality, file.Proper);
if (!_qualityUpgradeSpecification.IsSatisfiedBy(new Quality { QualityType = file.Quality, Proper = file.Proper }, subject.Quality, subject.Series.QualityProfile.Cutoff)) if (!_qualityUpgradeSpecification.IsSatisfiedBy(new QualityModel { Quality = file.Quality, Proper = file.Proper }, subject.Quality, subject.Series.QualityProfile.Cutoff))
return false; return false;
} }

@ -153,7 +153,7 @@ namespace NzbDrone.Core.Providers
episodeFile.SeriesId = series.SeriesId; episodeFile.SeriesId = series.SeriesId;
episodeFile.Path = filePath.NormalizePath(); episodeFile.Path = filePath.NormalizePath();
episodeFile.Size = size; episodeFile.Size = size;
episodeFile.Quality = parseResult.Quality.QualityType; episodeFile.Quality = parseResult.Quality.Quality;
episodeFile.Proper = parseResult.Quality.Proper; episodeFile.Proper = parseResult.Quality.Proper;
episodeFile.SeasonNumber = parseResult.SeasonNumber; episodeFile.SeasonNumber = parseResult.SeasonNumber;
episodeFile.SceneName = Path.GetFileNameWithoutExtension(filePath.NormalizePath()); episodeFile.SceneName = Path.GetFileNameWithoutExtension(filePath.NormalizePath());
@ -202,7 +202,7 @@ namespace NzbDrone.Core.Providers
var parseResult = Parser.ParsePath(episodeFile.Path); var parseResult = Parser.ParsePath(episodeFile.Path);
parseResult.Series = series; parseResult.Series = series;
parseResult.Quality = new Quality{ QualityType = episodeFile.Quality, Proper = episodeFile.Proper }; parseResult.Quality = new QualityModel{ Quality = episodeFile.Quality, Proper = episodeFile.Proper };
var message = _downloadProvider.GetDownloadTitle(parseResult); var message = _downloadProvider.GetDownloadTitle(parseResult);

@ -61,7 +61,7 @@ namespace NzbDrone.Core.Providers
Date = DateTime.Now, Date = DateTime.Now,
Indexer = parseResult.Indexer, Indexer = parseResult.Indexer,
IsProper = parseResult.Quality.Proper, IsProper = parseResult.Quality.Proper,
Quality = parseResult.Quality.QualityType, Quality = parseResult.Quality.Quality,
NzbTitle = parseResult.OriginalString, NzbTitle = parseResult.OriginalString,
EpisodeId = episode.EpisodeId, EpisodeId = episode.EpisodeId,
SeriesId = episode.SeriesId, SeriesId = episode.SeriesId,
@ -104,7 +104,7 @@ namespace NzbDrone.Core.Providers
if (parseResult.FullSeason) if (parseResult.FullSeason)
{ {
var seasonResult = String.Format("{0} - Season {1} [{2}]", seriesTitle, var seasonResult = String.Format("{0} - Season {1} [{2}]", seriesTitle,
parseResult.SeasonNumber, parseResult.Quality.QualityType); parseResult.SeasonNumber, parseResult.Quality.Quality);
if (parseResult.Quality.Proper) if (parseResult.Quality.Proper)
seasonResult += " [Proper]"; seasonResult += " [Proper]";
@ -115,7 +115,7 @@ namespace NzbDrone.Core.Providers
if (parseResult.Series.IsDaily) if (parseResult.Series.IsDaily)
{ {
var dailyResult = String.Format("{0} - {1:yyyy-MM-dd} - {2} [{3}]", seriesTitle, var dailyResult = String.Format("{0} - {1:yyyy-MM-dd} - {2} [{3}]", seriesTitle,
parseResult.AirDate, parseResult.EpisodeTitle, parseResult.Quality.QualityType); parseResult.AirDate, parseResult.EpisodeTitle, parseResult.Quality.Quality);
if (parseResult.Quality.Proper) if (parseResult.Quality.Proper)
dailyResult += " [Proper]"; dailyResult += " [Proper]";
@ -134,7 +134,7 @@ namespace NzbDrone.Core.Providers
var epNumberString = String.Join("-", episodeString); var epNumberString = String.Join("-", episodeString);
var result = String.Format("{0} - {1} - {2} [{3}]", seriesTitle, epNumberString, parseResult.EpisodeTitle, parseResult.Quality.QualityType); var result = String.Format("{0} - {1} - {2} [{3}]", seriesTitle, epNumberString, parseResult.EpisodeTitle, parseResult.Quality.Quality);
if (parseResult.Quality.Proper) if (parseResult.Quality.Proper)
{ {

@ -60,7 +60,7 @@ namespace NzbDrone.Core.Providers
logger.Debug("Item added to history: {0}", item.NzbTitle); logger.Debug("Item added to history: {0}", item.NzbTitle);
} }
public virtual Quality GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber) public virtual QualityModel GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber)
{ {
var quality = _database.SingleOrDefault<dynamic>(@"SELECT TOP 1 History.Quality , History.IsProper FROM History var quality = _database.SingleOrDefault<dynamic>(@"SELECT TOP 1 History.Quality , History.IsProper FROM History
INNER JOIN Episodes ON History.EpisodeId = Episodes.EpisodeId INNER JOIN Episodes ON History.EpisodeId = Episodes.EpisodeId
@ -72,7 +72,7 @@ namespace NzbDrone.Core.Providers
if (quality == null) return null; if (quality == null) return null;
return new Quality((QualityTypes)quality.Quality, quality.IsProper); return new QualityModel((QualityTypes)quality.Quality, quality.IsProper);
} }
public virtual void Delete(int historyId) public virtual void Delete(int historyId)

@ -68,7 +68,7 @@ namespace NzbDrone.Core.Providers
var hd = new QualityProfile var hd = new QualityProfile
{ {
Name = "HD", Name = "HD",
Allowed = new List<QualityTypes> { QualityTypes.HDTV, QualityTypes.WEBDL, QualityTypes.Bluray720p }, Allowed = new List<QualityTypes> { QualityTypes.HDTV, QualityTypes.WEBDL720p, QualityTypes.Bluray720p },
Cutoff = QualityTypes.HDTV Cutoff = QualityTypes.HDTV
}; };

@ -54,8 +54,7 @@ namespace NzbDrone.Core.Providers
public virtual void SetupDefault() public virtual void SetupDefault()
{ {
if (All().Count != 0) var inDb = All();
return;
Logger.Debug("Setting up default quality types"); Logger.Debug("Setting up default quality types");
@ -63,11 +62,18 @@ namespace NzbDrone.Core.Providers
qualityTypes.Add(new QualityType { QualityTypeId = 1, Name = "SDTV", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 1, Name = "SDTV", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 2, Name = "DVD", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 2, Name = "DVD", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 4, Name = "HDTV", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 4, Name = "HDTV", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 5, Name = "WEBDL", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 5, Name = "WEBDL720p", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 3, Name = "WEBDL1080p", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 6, Name = "Bluray720p", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 6, Name = "Bluray720p", MinSize = 0, MaxSize = 100 });
qualityTypes.Add(new QualityType { QualityTypeId = 7, Name = "Bluray1080p", MinSize = 0, MaxSize = 100 }); qualityTypes.Add(new QualityType { QualityTypeId = 7, Name = "Bluray1080p", MinSize = 0, MaxSize = 100 });
_database.InsertMany(qualityTypes); foreach(var qualityType in qualityTypes)
{
var db = inDb.SingleOrDefault(s => s.QualityTypeId == qualityType.QualityTypeId);
if (db == null)
_database.Insert(qualityType);
}
} }
} }
} }

@ -275,7 +275,7 @@ namespace NzbDrone.Core.Providers
ReportTitle = episodeParseResult.OriginalString, ReportTitle = episodeParseResult.OriginalString,
NzbUrl = episodeParseResult.NzbUrl, NzbUrl = episodeParseResult.NzbUrl,
Indexer = episodeParseResult.Indexer, Indexer = episodeParseResult.Indexer,
Quality = episodeParseResult.Quality.QualityType, Quality = episodeParseResult.Quality.Quality,
Proper = episodeParseResult.Quality.Proper, Proper = episodeParseResult.Quality.Proper,
Size = episodeParseResult.Size, Size = episodeParseResult.Size,
Age = episodeParseResult.Age, Age = episodeParseResult.Age,
@ -369,7 +369,7 @@ namespace NzbDrone.Core.Providers
ReportTitle = episodeParseResult.OriginalString, ReportTitle = episodeParseResult.OriginalString,
NzbUrl = episodeParseResult.NzbUrl, NzbUrl = episodeParseResult.NzbUrl,
Indexer = episodeParseResult.Indexer, Indexer = episodeParseResult.Indexer,
Quality = episodeParseResult.Quality.QualityType, Quality = episodeParseResult.Quality.Quality,
Proper = episodeParseResult.Quality.Proper, Proper = episodeParseResult.Quality.Proper,
Size = episodeParseResult.Size, Size = episodeParseResult.Size,
Age = episodeParseResult.Age, Age = episodeParseResult.Age,

@ -16,7 +16,7 @@ namespace NzbDrone.Core.Providers
{ {
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public virtual void UpdateEpisodeStatus(int episodeId, EpisodeStatusType episodeStatus, Quality quality) public virtual void UpdateEpisodeStatus(int episodeId, EpisodeStatusType episodeStatus, QualityModel quality)
{ {
try try
{ {
@ -26,7 +26,7 @@ namespace NzbDrone.Core.Providers
{ {
EpisodeId = episodeId, EpisodeId = episodeId,
EpisodeStatus = episodeStatus.ToString(), EpisodeStatus = episodeStatus.ToString(),
Quality = (quality == null ? String.Empty : quality.QualityType.ToString()) Quality = (quality == null ? String.Empty : quality.Quality.ToString())
}); });
var test = 0; var test = 0;
} }

@ -38,15 +38,15 @@ namespace NzbDrone.Core.Repository
public string ReleaseGroup { get; set; } public string ReleaseGroup { get; set; }
[Ignore] [Ignore]
public Model.Quality QualityWrapper public Model.QualityModel QualityWrapper
{ {
get get
{ {
return new Model.Quality(Quality, Proper); return new Model.QualityModel(Quality, Proper);
} }
set set
{ {
Quality = value.QualityType; Quality = value.Quality;
Proper = value.Proper; Proper = value.Proper;
} }
} }

@ -31,7 +31,7 @@ namespace NzbDrone.Core.Repository.Quality
foreach (var q in Allowed) foreach (var q in Allowed)
{ {
result += (int)q + "|"; result += q.Id + "|";
} }
return result.Trim('|'); return result.Trim('|');
} }
@ -41,7 +41,7 @@ namespace NzbDrone.Core.Repository.Quality
Allowed = new List<QualityTypes>(qualities.Length); Allowed = new List<QualityTypes>(qualities.Length);
foreach (var quality in qualities.Where(q => !String.IsNullOrWhiteSpace(q))) foreach (var quality in qualities.Where(q => !String.IsNullOrWhiteSpace(q)))
{ {
Allowed.Add((QualityTypes)Convert.ToInt32(quality)); Allowed.Add(QualityTypes.FindById(Convert.ToInt32(quality)));
} }
} }
} }

@ -1,44 +1,139 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace NzbDrone.Core.Repository.Quality namespace NzbDrone.Core.Repository.Quality
{ {
// ReSharper disable InconsistentNaming public class QualityTypes : IComparable<QualityTypes>
/// <summary> {
/// Represents Video Quality public int Id { get; set; }
/// </summary> public string Name { get; set; }
public enum QualityTypes public int Weight { get; set; }
{
/// <summary> public int CompareTo(QualityTypes other)
/// Quality is unknown {
/// </summary> if (other.Weight > Weight)
Unknown = 0, return -1;
/// <summary> if (other.Weight < Weight)
/// SD File (Source could be HD) return 1;
/// </summary>
SDTV = 1, if (other.Weight == Weight)
return 0;
/// <summary>
/// SD File (DVD Source) return 0;
/// </summary> }
DVD = 2,
public static bool operator !=(QualityTypes x, QualityTypes y)
/// <summary> {
/// HD File (HDTV Source) return !(x == y);
/// </summary> }
HDTV = 4,
public static bool operator ==(QualityTypes x, QualityTypes y)
/// <summary> {
/// HD File (Online Source) var xObj = (Object)x;
/// </summary> var yObj = (object)y;
WEBDL = 5,
if (xObj == null || yObj == null)
/// <summary> {
/// HD File (720p Blu-ray Source) return xObj == yObj;
/// </summary> }
Bluray720p = 6,
return x.CompareTo(y) == 0;
/// <summary> }
/// HD File (1080p Blu-ray Source)
/// </summary> public static bool operator >(QualityTypes x, QualityTypes y)
Bluray1080p = 7, {
return x.CompareTo(y) > 0;
}
public static bool operator <(QualityTypes x, QualityTypes y)
{
return x.CompareTo(y) < 0;
}
public static bool operator <=(QualityTypes x, QualityTypes y)
{
return x.CompareTo(y) <= 0;
}
public static bool operator >=(QualityTypes x, QualityTypes y)
{
return x.CompareTo(y) >= 0;
}
public override string ToString()
{
return Name;
}
public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hash = 17;
hash = hash * 23 + Weight.GetHashCode();
return hash;
}
}
public bool Equals(QualityTypes other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.Weight, Weight);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (QualityTypes)) return false;
return Equals((QualityTypes) obj);
}
public static QualityTypes Unknown = new QualityTypes { Id = 0, Name = "Unknown", Weight = 0 };
public static QualityTypes SDTV = new QualityTypes {Id = 1, Name = "SDTV", Weight = 1};
public static QualityTypes DVD = new QualityTypes { Id = 2, Name = "DVD", Weight = 2 };
public static QualityTypes HDTV = new QualityTypes { Id = 4, Name = "HDTV", Weight = 4 };
public static QualityTypes WEBDL720p = new QualityTypes { Id = 5, Name = "WEBDL-720p", Weight = 5 };
public static QualityTypes WEBDL1080p = new QualityTypes { Id = 3, Name = "WEBDL-1080p", Weight = 7 };
public static QualityTypes Bluray720p = new QualityTypes { Id = 6, Name = "Bluray720p", Weight = 6 };
public static QualityTypes Bluray1080p = new QualityTypes { Id = 7, Name = "Bluray1080p", Weight = 8 };
public static List<QualityTypes> All()
{
return new List<QualityTypes>
{
Unknown,
SDTV,
DVD,
HDTV,
WEBDL720p,
WEBDL1080p,
Bluray720p,
Bluray1080p
};
}
public static QualityTypes FindById(int id)
{
var quality = All().SingleOrDefault(q => q.Id == id);
if (quality == null)
throw new ArgumentException("ID does not match a known quality", "id");
return quality;
}
public static explicit operator QualityTypes(int id)
{
return FindById(id);
}
public static explicit operator int(QualityTypes quality)
{
return quality.Id;
}
} }
} }

@ -19,7 +19,7 @@ namespace NzbDrone.Core.Repository.Search
public string NzbInfoUrl { get; set; } public string NzbInfoUrl { get; set; }
public bool Success { get; set; } public bool Success { get; set; }
public ReportRejectionType SearchError { get; set; } public ReportRejectionType SearchError { get; set; }
public QualityTypes Quality { get; set; } public Quality.QualityTypes Quality { get; set; }
public bool Proper { get; set; } public bool Proper { get; set; }
public int Age { get; set; } public int Age { get; set; }
public LanguageType Language { get; set; } public LanguageType Language { get; set; }

@ -1,6 +1,11 @@
#top #top
{ {
overflow: auto; margin: 20px;
overflow: hidden;
}
#top .settingsForm {
float: left;
} }
#profileContainer #profileContainer
@ -59,7 +64,7 @@
.profileSection .profileSection
{ {
float: left; float: left;
width: 270px; width: 265px;
margin: 2px; margin: 2px;
border:solid 1px #CCCCCD; border:solid 1px #CCCCCD;
display: inline-block; display: inline-block;
@ -74,7 +79,7 @@
margin-right: 20px; margin-right: 20px;
font-weight: bold; font-weight: bold;
display: inline-block; display: inline-block;
width: 50px; width: 40px;
} }
.profileOptions input, .profileOptions select .profileOptions input, .profileOptions select
@ -142,7 +147,6 @@
width: 600px; width: 600px;
} }
.slider-container #QualityForm .ui-accordion .ui-accordion-content {
{ padding: 1em 2em;
margin-bottom: 10px;
} }

@ -117,3 +117,38 @@
.settingsForm .validation-error { .settingsForm .validation-error {
background: url("../Content/jQueryUI/images/ui-bg_flat_30_b40404_40x100.png") repeat-x scroll 50% 50% #B40404; background: url("../Content/jQueryUI/images/ui-bg_flat_30_b40404_40x100.png") repeat-x scroll 50% 50% #B40404;
} }
/* Navigation */
.settings-navigation {
line-height: normal;
list-style: none outside none;
margin-left: 5px;
margin-bottom: 30px;
padding: 5px 0px 20px 0px;
}
.settings-navigation li {
display: block;
float: left;
padding: 5px;
}
.settings-navigation li.current_action a {
background-color: #065EFE;
}
.settings-navigation a {
background-color: #191919;
color: white;
display: block;
float: left;
font-family: "Segoe UI","Open Sans","Segoe UI Light",sans-serif;
font-size: 16px;
font-weight: normal;
height: 26px;
padding: 2px 10px;
text-align: center;
text-decoration: none;
vertical-align: middle;
}

@ -139,8 +139,7 @@ namespace NzbDrone.Web.Controllers
}).ToList(); }).ToList();
model.Seasons = seasons; model.Seasons = seasons;
var qualities = (from QualityTypes q in Enum.GetValues(typeof(QualityTypes)) var qualities = QualityTypes.All().ToList();
select new { Id = (int)q, Name = q.ToString() }).ToList();
model.QualitySelectList = new SelectList(qualities.Where(q => q.Id > 0), "Id", "Name"); model.QualitySelectList = new SelectList(qualities.Where(q => q.Id > 0), "Id", "Name");

@ -16,13 +16,13 @@ using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Repository.Quality;
using NzbDrone.Web.Filters; using NzbDrone.Web.Filters;
using NzbDrone.Web.Models; using NzbDrone.Web.Models;
using QualityModel = NzbDrone.Web.Models.QualityModel;
namespace NzbDrone.Web.Controllers namespace NzbDrone.Web.Controllers
{ {
[HandleError] [HandleError]
public class SettingsController : Controller public class SettingsController : Controller
{ {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly ConfigProvider _configProvider; private readonly ConfigProvider _configProvider;
private readonly IndexerProvider _indexerProvider; private readonly IndexerProvider _indexerProvider;
private readonly QualityProvider _qualityProvider; private readonly QualityProvider _qualityProvider;
@ -35,6 +35,8 @@ namespace NzbDrone.Web.Controllers
private readonly MetadataProvider _metadataProvider; private readonly MetadataProvider _metadataProvider;
private readonly JobProvider _jobProvider; private readonly JobProvider _jobProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public SettingsController(ConfigProvider configProvider, IndexerProvider indexerProvider, public SettingsController(ConfigProvider configProvider, IndexerProvider indexerProvider,
QualityProvider qualityProvider, AutoConfigureProvider autoConfigureProvider, QualityProvider qualityProvider, AutoConfigureProvider autoConfigureProvider,
SeriesProvider seriesProvider, ExternalNotificationProvider externalNotificationProvider, SeriesProvider seriesProvider, ExternalNotificationProvider externalNotificationProvider,
@ -58,7 +60,33 @@ namespace NzbDrone.Web.Controllers
public ActionResult Index() public ActionResult Index()
{ {
return View(); return RedirectToAction("Naming", "Settings");
}
public ActionResult Naming()
{
var model = new EpisodeNamingModel();
model.SeriesName = _configProvider.SortingIncludeSeriesName;
model.EpisodeName = _configProvider.SortingIncludeEpisodeTitle;
model.ReplaceSpaces = _configProvider.SortingReplaceSpaces;
model.AppendQuality = _configProvider.SortingAppendQuality;
model.SeasonFolders = _configProvider.UseSeasonFolder;
model.SeasonFolderFormat = _configProvider.SortingSeasonFolderFormat;
model.SeparatorStyle = _configProvider.SortingSeparatorStyle;
model.NumberStyle = _configProvider.SortingNumberStyle;
model.MultiEpisodeStyle = _configProvider.SortingMultiEpisodeStyle;
model.SceneName = _configProvider.SortingUseSceneName;
model.SeparatorStyles = new SelectList(EpisodeSortingHelper.GetSeparatorStyles(), "Id", "Name");
model.NumberStyles = new SelectList(EpisodeSortingHelper.GetNumberStyles(), "Id", "Name");
model.MultiEpisodeStyles = new SelectList(EpisodeSortingHelper.GetMultiEpisodeStyles(), "Id", "Name");
//Metadata
model.MetadataXbmcEnabled = _metadataProvider.GetSettings(typeof(Core.Providers.Metadata.Xbmc)).Enable;
model.MetadataUseBanners = _configProvider.MetadataUseBanners;
return View(model);
} }
public ActionResult Indexers() public ActionResult Indexers()
@ -126,7 +154,7 @@ namespace NzbDrone.Web.Controllers
public ActionResult Quality() public ActionResult Quality()
{ {
var profiles = _qualityProvider.All().ToList(); var profiles = _qualityProvider.All();
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile); var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
var qualityProfileSelectList = new SelectList(profiles, "QualityProfileId", "Name"); var qualityProfileSelectList = new SelectList(profiles, "QualityProfileId", "Name");
@ -139,7 +167,8 @@ namespace NzbDrone.Web.Controllers
SdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize, SdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize,
DvdMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 2).MaxSize, DvdMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 2).MaxSize,
HdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 4).MaxSize, HdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 4).MaxSize,
WebdlMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 5).MaxSize, Webdl720pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 5).MaxSize,
Webdl1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 3).MaxSize,
Bluray720pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 6).MaxSize, Bluray720pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 6).MaxSize,
Bluray1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize Bluray1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize
}; };
@ -199,32 +228,6 @@ namespace NzbDrone.Web.Controllers
return View(model); return View(model);
} }
public ActionResult Naming()
{
var model = new EpisodeNamingModel();
model.SeriesName = _configProvider.SortingIncludeSeriesName;
model.EpisodeName = _configProvider.SortingIncludeEpisodeTitle;
model.ReplaceSpaces = _configProvider.SortingReplaceSpaces;
model.AppendQuality = _configProvider.SortingAppendQuality;
model.SeasonFolders = _configProvider.UseSeasonFolder;
model.SeasonFolderFormat = _configProvider.SortingSeasonFolderFormat;
model.SeparatorStyle = _configProvider.SortingSeparatorStyle;
model.NumberStyle = _configProvider.SortingNumberStyle;
model.MultiEpisodeStyle = _configProvider.SortingMultiEpisodeStyle;
model.SceneName = _configProvider.SortingUseSceneName;
model.SeparatorStyles = new SelectList(EpisodeSortingHelper.GetSeparatorStyles(), "Id", "Name");
model.NumberStyles = new SelectList(EpisodeSortingHelper.GetNumberStyles(), "Id", "Name");
model.MultiEpisodeStyles = new SelectList(EpisodeSortingHelper.GetMultiEpisodeStyles(), "Id", "Name");
//Metadata
model.MetadataXbmcEnabled = _metadataProvider.GetSettings(typeof(Core.Providers.Metadata.Xbmc)).Enable;
model.MetadataUseBanners = _configProvider.MetadataUseBanners;
return View(model);
}
public ActionResult System() public ActionResult System()
{ {
var selectedAuthenticationType = _configFileProvider.AuthenticationType; var selectedAuthenticationType = _configFileProvider.AuthenticationType;
@ -280,10 +283,19 @@ namespace NzbDrone.Web.Controllers
model.Sdtv = profile.Allowed.Contains(QualityTypes.SDTV); model.Sdtv = profile.Allowed.Contains(QualityTypes.SDTV);
model.Dvd = profile.Allowed.Contains(QualityTypes.DVD); model.Dvd = profile.Allowed.Contains(QualityTypes.DVD);
model.Hdtv = profile.Allowed.Contains(QualityTypes.HDTV); model.Hdtv = profile.Allowed.Contains(QualityTypes.HDTV);
model.Webdl = profile.Allowed.Contains(QualityTypes.WEBDL); model.Webdl720p = profile.Allowed.Contains(QualityTypes.WEBDL720p);
model.Webdl1080p = profile.Allowed.Contains(QualityTypes.WEBDL1080p);
model.Bluray720p = profile.Allowed.Contains(QualityTypes.Bluray720p); model.Bluray720p = profile.Allowed.Contains(QualityTypes.Bluray720p);
model.Bluray1080p = profile.Allowed.Contains(QualityTypes.Bluray1080p); model.Bluray1080p = profile.Allowed.Contains(QualityTypes.Bluray1080p);
model.Cutoff = profile.Cutoff; model.Cutoff = (int)profile.Cutoff;
model.SdtvId = QualityTypes.SDTV.Id;
model.DvdId = QualityTypes.DVD.Id;
model.HdtvId = QualityTypes.HDTV.Id;
model.Webdl720pId = QualityTypes.WEBDL720p.Id;
model.Webdl1080pId = QualityTypes.WEBDL1080p.Id;
model.Bluray720pId = QualityTypes.Bluray720p.Id;
model.Bluray1080pId = QualityTypes.Bluray1080p.Id;
return PartialView("QualityProfileItem", model); return PartialView("QualityProfileItem", model);
} }
@ -472,7 +484,7 @@ namespace NzbDrone.Web.Controllers
var profile = new QualityProfile(); var profile = new QualityProfile();
profile.QualityProfileId = profileModel.QualityProfileId; profile.QualityProfileId = profileModel.QualityProfileId;
profile.Name = profileModel.Name; profile.Name = profileModel.Name;
profile.Cutoff = profileModel.Cutoff; profile.Cutoff = (QualityTypes)profileModel.Cutoff;
profile.Allowed = new List<QualityTypes>(); profile.Allowed = new List<QualityTypes>();
@ -485,8 +497,11 @@ namespace NzbDrone.Web.Controllers
if (profileModel.Hdtv) if (profileModel.Hdtv)
profile.Allowed.Add(QualityTypes.HDTV); profile.Allowed.Add(QualityTypes.HDTV);
if (profileModel.Webdl) if (profileModel.Webdl720p)
profile.Allowed.Add(QualityTypes.WEBDL); profile.Allowed.Add(QualityTypes.WEBDL720p);
if (profileModel.Webdl1080p)
profile.Allowed.Add(QualityTypes.WEBDL1080p);
if (profileModel.Bluray720p) if (profileModel.Bluray720p)
profile.Allowed.Add(QualityTypes.Bluray720p); profile.Allowed.Add(QualityTypes.Bluray720p);
@ -506,7 +521,8 @@ namespace NzbDrone.Web.Controllers
qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize = data.SdtvMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize = data.SdtvMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 2).MaxSize = data.DvdMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 2).MaxSize = data.DvdMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 4).MaxSize = data.HdtvMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 4).MaxSize = data.HdtvMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 5).MaxSize = data.WebdlMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 5).MaxSize = data.Webdl720pMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 3).MaxSize = data.Webdl1080pMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 6).MaxSize = data.Bluray720pMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 6).MaxSize = data.Bluray720pMaxSize;
qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize = data.Bluray1080pMaxSize; qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize = data.Bluray1080pMaxSize;

@ -6,6 +6,7 @@ using System.Threading;
using System.Web; using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using System.Web.Routing; using System.Web.Routing;
using LowercaseRoutesMVC;
using NLog.Config; using NLog.Config;
using Ninject; using Ninject;
using Ninject.Web.Mvc; using Ninject.Web.Mvc;
@ -26,7 +27,7 @@ namespace NzbDrone.Web
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute( routes.MapRouteLowercase(
"Default", // Route name "Default", // Route name
"{controller}/{action}/{id}", // URL with parameters "{controller}/{action}/{id}", // URL with parameters
new { controller = "Series", action = "Index", id = UrlParameter.Optional } // Parameter defaults new { controller = "Series", action = "Index", id = UrlParameter.Optional } // Parameter defaults

@ -7,7 +7,7 @@ namespace NzbDrone.Web.Helpers
{ {
public static class IsCurrentActionHelper public static class IsCurrentActionHelper
{ {
private static bool IsCurrentController(HtmlHelper helper, string actionName, string controllerName) private static bool IsCurrentController(HtmlHelper helper, string controllerName)
{ {
var currentControllerName = (string) helper.ViewContext.RouteData.Values["controller"]; var currentControllerName = (string) helper.ViewContext.RouteData.Values["controller"];
@ -17,12 +17,23 @@ namespace NzbDrone.Web.Helpers
return false; return false;
} }
public static string CurrentActionLink(this HtmlHelper helper, string text, string actionName, private static bool IsCurrentAction(HtmlHelper helper, string actionName, string controllerName)
string controllerName) {
var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) &&
currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
return true;
return false;
}
public static string CurrentControllerLink(this HtmlHelper helper, string text, string actionName, string controllerName)
{ {
string result; string result;
if (IsCurrentController(helper, actionName, controllerName)) if (IsCurrentController(helper, controllerName))
{ {
result = "<li class='current_page_item'>"; result = "<li class='current_page_item'>";
} }
@ -33,5 +44,21 @@ namespace NzbDrone.Web.Helpers
return result + helper.ActionLink(text, actionName, controllerName).ToHtmlString() + @"</li>"; return result + helper.ActionLink(text, actionName, controllerName).ToHtmlString() + @"</li>";
} }
public static string CurrentActionLink(this HtmlHelper helper, string text, string actionName, string controllerName)
{
string result;
if (IsCurrentAction(helper, actionName, controllerName))
{
result = "<li class='current_action'>";
}
else
{
result = "<li>";
}
return result + helper.ActionLink(text, actionName, controllerName).ToHtmlString() + @"</li>";
}
} }
} }

@ -18,7 +18,8 @@ namespace NzbDrone.Web.Models
public int SdtvMaxSize { get; set; } public int SdtvMaxSize { get; set; }
public int DvdMaxSize { get; set; } public int DvdMaxSize { get; set; }
public int HdtvMaxSize { get; set; } public int HdtvMaxSize { get; set; }
public int WebdlMaxSize { get; set; } public int Webdl720pMaxSize { get; set; }
public int Webdl1080pMaxSize { get; set; }
public int Bluray720pMaxSize { get; set; } public int Bluray720pMaxSize { get; set; }
public int Bluray1080pMaxSize { get; set; } public int Bluray1080pMaxSize { get; set; }
} }

@ -18,7 +18,7 @@ namespace NzbDrone.Web.Models
[DisplayName("Cut-off")] [DisplayName("Cut-off")]
[Required(ErrorMessage = "Valid Cut-off is Required")] [Required(ErrorMessage = "Valid Cut-off is Required")]
public QualityTypes Cutoff { get; set; } public int Cutoff { get; set; }
[DisplayName("Allowed Qualities")] [DisplayName("Allowed Qualities")]
public List<QualityTypes> Allowed { get; set; } public List<QualityTypes> Allowed { get; set; }
@ -26,20 +26,30 @@ namespace NzbDrone.Web.Models
//Quality Booleans //Quality Booleans
[DisplayName("SDTV")] [DisplayName("SDTV")]
public bool Sdtv { get; set; } public bool Sdtv { get; set; }
public int SdtvId { get; set; }
[DisplayName("DVD")] [DisplayName("DVD")]
public bool Dvd { get; set; } public bool Dvd { get; set; }
public int DvdId { get; set; }
[DisplayName("HDTV")] [DisplayName("HDTV")]
public bool Hdtv { get; set; } public bool Hdtv { get; set; }
public int HdtvId { get; set; }
[DisplayName("WEBDL")] [DisplayName("WEBDL-720p")]
public bool Webdl { get; set; } public bool Webdl720p { get; set; }
public int Webdl720pId { get; set; }
[DisplayName("WEBDL-1080p")]
public bool Webdl1080p { get; set; }
public int Webdl1080pId { get; set; }
[DisplayName("Bluray720p")] [DisplayName("Bluray720p")]
public bool Bluray720p { get; set; } public bool Bluray720p { get; set; }
public int Bluray720pId { get; set; }
[DisplayName("Bluray1080p")] [DisplayName("Bluray1080p")]
public bool Bluray1080p { get; set; } public bool Bluray1080p { get; set; }
public int Bluray1080pId { get; set; }
} }
} }

@ -63,6 +63,9 @@
<Reference Include="EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <Reference Include="EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.4.3.0\lib\net40\EntityFramework.dll</HintPath> <HintPath>..\packages\EntityFramework.4.3.0\lib\net40\EntityFramework.dll</HintPath>
</Reference> </Reference>
<Reference Include="LowercaseRoutesMVC">
<HintPath>..\packages\LowercaseRoutesMVC.1.0.3\lib\LowercaseRoutesMVC.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private> <Private>True</Private>
@ -412,6 +415,7 @@
<Content Include="Views\Settings\QualityProfileItem.cshtml" /> <Content Include="Views\Settings\QualityProfileItem.cshtml" />
<Content Include="Views\System\Indexers.cshtml" /> <Content Include="Views\System\Indexers.cshtml" />
<Content Include="Views\System\Config.cshtml" /> <Content Include="Views\System\Config.cshtml" />
<Content Include="Views\Settings\_SettingsLayout.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="App_Data\" /> <Folder Include="App_Data\" />
@ -473,9 +477,6 @@
<ItemGroup> <ItemGroup>
<Content Include="Views\Update\ViewLog.cshtml" /> <Content Include="Views\Update\ViewLog.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="Views\Settings\Index.cshtml" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Views\Shared\_ReferenceLayout.cshtml" /> <Content Include="Views\Shared\_ReferenceLayout.cshtml" />
</ItemGroup> </ItemGroup>

@ -70,21 +70,19 @@ $(document).on('click', '.quality-selectee', function () {
var cleanId = getCleanId(this); var cleanId = getCleanId(this);
var cutoff = '#' + cleanId + '_Cutoff'; var cutoff = '#' + cleanId + '_Cutoff';
var name = jQuery('[for="' + id + '"]').children('.ui-button-text').text(); var name = jQuery('[for="' + id + '"]').children('.ui-button-text').text();
var qualityId = $(this).attr('data-quality-id');
//Remove 'Unknown' //Remove 'Unknown'
$(cutoff + ' option').each(function () { if ($(this).text().indexOf('Unknown') > -1) $(cutoff + ' option').remove(':contains("' + $(this).text() + '")'); }); $(cutoff + ' option').each(function () { if ($(this).text().indexOf('Unknown') > -1) $(cutoff + ' option').remove(':contains("' + $(this).text() + '")'); });
//Add option to cutoff SelectList //Add option to cutoff SelectList
if ($(this).attr('checked')) { if ($(this).attr('checked')) {
$('<option>' + name + '</option>').appendTo(cutoff); $('<option>' + name + '</option>').val(qualityId).appendTo(cutoff);
} }
//Remove option from cutoff SelectList //Remove option from cutoff SelectList
else { else {
$(cutoff + ' option').each(function () { $(cutoff).find('option[value="' + qualityId + '"]').remove();
if ($(this).text().indexOf(name) > -1)
$(cutoff + ' option').remove(':contains("' + $(this).text() + '")');
});
} }
}); });

@ -1,6 +1,10 @@
@using NzbDrone.Web.Helpers; @using NzbDrone.Web.Helpers;
@model NzbDrone.Web.Models.DownloadClientSettingsModel @model NzbDrone.Web.Models.DownloadClientSettingsModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<style> <style>
.downloadClient .downloadClient
{ {

@ -1,34 +0,0 @@
@using NzbDrone.Web.Helpers
@{ViewBag.Title = "Settings";}
@section HeaderContent
{
@Html.IncludeCss("Settings.css")
@Html.IncludeCss("IndexerSettings.css")
@Html.IncludeCss("QualitySettings.css")
}
<div class="jquery-tabs">
<ul>
<li><a href="#Naming">Naming</a></li>
<li>@Html.ActionLink("Quality", "Quality", "Settings")</li>
<li>@Html.ActionLink("Indexers", "Indexers", "Settings")</li>
<li>@Html.ActionLink("Download Client", "DownloadClient", "Settings")</li>
<li>@Html.ActionLink("Notifications", "Notifications", "Settings")</li>
<li>@Html.ActionLink("System", "System", "Settings")</li>
<li>@Html.ActionLink("Misc", "Misc", "Settings")</li>
</ul>
<div id="Naming">@{ Html.RenderAction("Naming", "Settings"); }</div>
</div>
@section Scripts{
@Html.IncludeScript("NzbDrone/settings.js")
@Html.IncludeScript("NzbDrone/qualitySettings.js")
<script type="text/javascript">
$(document).ready(function () {
createExamples();
});
</script>
}

@ -1,12 +1,16 @@
@using NzbDrone.Web.Helpers @using NzbDrone.Web.Helpers
@model NzbDrone.Web.Models.IndexerSettingsModel @model NzbDrone.Web.Models.IndexerSettingsModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<style> <style>
.indexerStatusContainer { .indexerStatusContainer {
margin-left: 14px; margin-left: 14px;
} }
</style> </style>
<div class="indexerStatusContainer"> <div class="indexerStatusContainer">
@Html.CheckBox("nzbMatrixStatus", @Model.NzbMatrixEnabled, new { @class = "indexerStatusButton" }) @Html.CheckBox("nzbMatrixStatus", @Model.NzbMatrixEnabled, new { @class = "indexerStatusButton" })
<label for="nzbMatrixStatus">NZBMatrix</label> <label for="nzbMatrixStatus">NZBMatrix</label>
@ -177,6 +181,8 @@
} }
</div> </div>
@section Scripts
{
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function () { $(document).ready(function () {
//Allow unobstrusive validation of the AJAX loaded form //Allow unobstrusive validation of the AJAX loaded form
@ -318,3 +324,4 @@
$("#title_" + profileId).text(value); $("#title_" + profileId).text(value);
}).keyup(); }).keyup();
</script> </script>
}

@ -1,6 +1,9 @@
@using NzbDrone.Web.Helpers @using NzbDrone.Web.Helpers
@model NzbDrone.Web.Models.MiscSettingsModel @model NzbDrone.Web.Models.MiscSettingsModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<div class="warningBox"> <div class="warningBox">
Enabling Backlog Searching can use lots of bandwidth and is not recommended for users with block Usenet accounts or bandwidth restrictions. Enabling Backlog Searching can use lots of bandwidth and is not recommended for users with block Usenet accounts or bandwidth restrictions.

@ -1,7 +1,6 @@
@using NzbDrone.Web.Helpers @model NzbDrone.Web.Models.EpisodeNamingModel
@model NzbDrone.Web.Models.EpisodeNamingModel
@{ @{
Layout = null; Layout = "_SettingsLayout.cshtml";
} }
<style> <style>
#examples #examples
@ -36,3 +35,11 @@
Save</button> Save</button>
} }
</div> </div>
@section Scripts{
<script type="text/javascript">
$(document).ready(function () {
createExamples();
});
</script>
}

@ -1,5 +1,9 @@
@model NzbDrone.Web.Models.NotificationSettingsModel @model NzbDrone.Web.Models.NotificationSettingsModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<style> <style>
.notifier .notifier
{ {
@ -54,6 +58,9 @@
Save</button> Save</button>
} }
</div> </div>
@section Scripts
{
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
//Allow unobstrusive validation of the AJAX loaded form //Allow unobstrusive validation of the AJAX loaded form
@ -89,3 +96,4 @@
$(container).prev('h3.ui-accordion-header').removeClass('validation-error'); $(container).prev('h3.ui-accordion-header').removeClass('validation-error');
}); });
</script> </script>
}

@ -1,11 +1,15 @@
@using NzbDrone.Core.Repository.Quality @using NzbDrone.Core.Repository.Quality
@using NzbDrone.Web.Helpers; @using NzbDrone.Web.Helpers;
@model NzbDrone.Web.Models.QualityModel @model NzbDrone.Web.Models.QualityModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<div id="stylized"> <div id="stylized">
@using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new { id = "QualityForm", name = "QualityForm" })) @using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new { id = "QualityForm", name = "QualityForm", @class = "settingsForm" }))
{ {
<div id="top" class="settingsForm"> <div id="top">
<label class="labelClass">@Html.LabelFor(m => m.DefaultQualityProfileId) <label class="labelClass">@Html.LabelFor(m => m.DefaultQualityProfileId)
<span class="small">@Html.DescriptionFor(m => m.DefaultQualityProfileId)</span> <span class="small">@Html.DescriptionFor(m => m.DefaultQualityProfileId)</span>
</label> </label>
@ -60,10 +64,10 @@
</span>MB </span>MB
</div> </div>
<div class="slider-container"> <div class="slider-container">
<b>WEBDL</b> <b>WEBDL-720p</b>
<div id="webdl-slider" class="slider"> <div id="webdl-slider" class="slider">
</div> </div>
@Html.HiddenFor(m => m.WebdlMaxSize, new { @class = "slider-value" }) @Html.HiddenFor(m => m.Webdl720pMaxSize, new { @class = "slider-value" })
30 minute size: <span class="30-minute"></span>MB | 60 minute size: <span class="60-minute"> 30 minute size: <span class="30-minute"></span>MB | 60 minute size: <span class="60-minute">
</span>MB </span>MB
</div> </div>
@ -75,6 +79,14 @@
30 minute size: <span class="30-minute"></span>MB | 60 minute size: <span class="60-minute"> 30 minute size: <span class="30-minute"></span>MB | 60 minute size: <span class="60-minute">
</span>MB </span>MB
</div> </div>
<div class="slider-container">
<b>WEBDL-1080p</b>
<div id="webdl-slider" class="slider">
</div>
@Html.HiddenFor(m => m.Webdl1080pMaxSize, new { @class = "slider-value" })
30 minute size: <span class="30-minute"></span>MB | 60 minute size: <span class="60-minute">
</span>MB
</div>
<div class="slider-container"> <div class="slider-container">
<b>Bluray 1080p</b> <b>Bluray 1080p</b>
<div id="bluray1080p-slider" class="slider"> <div id="bluray1080p-slider" class="slider">
@ -90,6 +102,10 @@
Save</button> Save</button>
} }
</div> </div>
@section Scripts {
@Html.IncludeScript("NzbDrone/qualitySettings.js")
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
setupSliders(); setupSliders();
@ -99,3 +115,4 @@
$(this).button(); $(this).button();
}); });
</script> </script>
}

@ -20,20 +20,22 @@
@Html.LabelFor(x => x.Name) @Html.LabelFor(x => x.Name)
@Html.TextBoxFor(x => x.Name, new { @class = "profileName_textbox" }) @Html.TextBoxFor(x => x.Name, new { @class = "profileName_textbox" })
@Html.LabelFor(x => x.Cutoff) @Html.LabelFor(x => x.Cutoff)
@Html.DropDownListFor(m => m.Cutoff, new SelectList(Model.Allowed, Model.Cutoff)) @Html.DropDownListFor(m => m.Cutoff, new SelectList(Model.Allowed, "Id", "Name", Model.Cutoff))
</div> </div>
<div class="qualitySelectees"> <div class="qualitySelectees">
@Html.CheckBoxFor(m => m.Sdtv, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Sdtv, new { @class = "quality-selectee", data_quality_id = Model.SdtvId })
@Html.LabelFor(m => m.Sdtv) @Html.LabelFor(m => m.Sdtv)
@Html.CheckBoxFor(m => m.Dvd, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Dvd, new { @class = "quality-selectee", data_quality_id = Model.DvdId })
@Html.LabelFor(m => m.Dvd) @Html.LabelFor(m => m.Dvd)
@Html.CheckBoxFor(m => m.Hdtv, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Hdtv, new { @class = "quality-selectee", data_quality_id = Model.HdtvId })
@Html.LabelFor(m => m.Hdtv) @Html.LabelFor(m => m.Hdtv)
@Html.CheckBoxFor(m => m.Webdl, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Webdl720p, new { @class = "quality-selectee", data_quality_id = Model.Webdl720pId })
@Html.LabelFor(m => m.Webdl) @Html.LabelFor(m => m.Webdl720p)
@Html.CheckBoxFor(m => m.Bluray720p, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Bluray720p, new { @class = "quality-selectee", data_quality_id = Model.Bluray720pId })
@Html.LabelFor(m => m.Bluray720p) @Html.LabelFor(m => m.Bluray720p)
@Html.CheckBoxFor(m => m.Bluray1080p, new { @class = "quality-selectee" }) @Html.CheckBoxFor(m => m.Webdl1080p, new { @class = "quality-selectee", data_quality_id = Model.Webdl1080pId })
@Html.LabelFor(m => m.Webdl1080p)
@Html.CheckBoxFor(m => m.Bluray1080p, new { @class = "quality-selectee", data_quality_id = Model.Bluray1080pId })
@Html.LabelFor(m => m.Bluray1080p) @Html.LabelFor(m => m.Bluray1080p)
</div> </div>
@Html.HiddenFor(x => x.QualityProfileId, new { @class = "qualityProfileId" }) @Html.HiddenFor(x => x.QualityProfileId, new { @class = "qualityProfileId" })

@ -1,7 +1,9 @@
@using NzbDrone.Web.Helpers @using NzbDrone.Web.Helpers
@model NzbDrone.Web.Models.SystemSettingsModel @model NzbDrone.Web.Models.SystemSettingsModel
@{ Layout = null; }
@{
Layout = "_SettingsLayout.cshtml";
}
<div class="infoBox"> <div class="infoBox">
You must manually restart NzbDrone for these changes to take effect. (Automatic restart coming soon!) You must manually restart NzbDrone for these changes to take effect. (Automatic restart coming soon!)
@ -43,6 +45,8 @@
} }
</div> </div>
@section Scripts
{
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
//Allow unobstrusive validation of the AJAX loaded form //Allow unobstrusive validation of the AJAX loaded form
@ -70,3 +74,4 @@
}; };
}); });
</script> </script>
}

@ -0,0 +1,27 @@
@using NzbDrone.Web.Helpers
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
@section HeaderContent
{
@Html.IncludeCss("Settings.css")
@Html.IncludeCss("IndexerSettings.css")
@Html.IncludeCss("QualitySettings.css")
}
<ul class="settings-navigation">
@MvcHtmlString.Create(Html.CurrentActionLink("Naming", "Naming", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Quality", "Quality", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Indexers", "Indexers", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Download Client", "DownloadClient", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Notifications", "Notifications", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("System", "System", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Misc", "Misc", "Settings"))
</ul>
@RenderBody()
@section Scripts{
@Html.IncludeScript("NzbDrone/settings.js")
@RenderSection("Scripts", required: false)
}

@ -24,12 +24,12 @@
<div id="centered"> <div id="centered">
<div id="menu"> <div id="menu">
<ul> <ul>
@MvcHtmlString.Create(Html.CurrentActionLink("Series", "Index", "Series")) @MvcHtmlString.Create(Html.CurrentControllerLink("Series", "Index", "Series"))
@MvcHtmlString.Create(Html.CurrentActionLink("Upcoming", "Index", "Upcoming")) @MvcHtmlString.Create(Html.CurrentControllerLink("Upcoming", "Index", "Upcoming"))
@MvcHtmlString.Create(Html.CurrentActionLink("History", "Index", "History")) @MvcHtmlString.Create(Html.CurrentControllerLink("History", "Index", "History"))
@MvcHtmlString.Create(Html.CurrentActionLink("Missing", "Index", "Missing")) @MvcHtmlString.Create(Html.CurrentControllerLink("Missing", "Index", "Missing"))
@MvcHtmlString.Create(Html.CurrentActionLink("Settings", "Index", "Settings")) @MvcHtmlString.Create(Html.CurrentControllerLink("Settings", "Index", "Settings"))
@MvcHtmlString.Create(Html.CurrentActionLink("Logs", "Index", "Log")) @MvcHtmlString.Create(Html.CurrentControllerLink("Logs", "Index", "Log"))
</ul> </ul>
<input id="localSeriesLookup" type="text" /> <input id="localSeriesLookup" type="text" />
</div> </div>

@ -16,6 +16,7 @@
<package id="jQuery.Validation" version="1.9" /> <package id="jQuery.Validation" version="1.9" />
<package id="jQuery.Validation.Unobtrusive" version="2.0.20126.16343" /> <package id="jQuery.Validation.Unobtrusive" version="2.0.20126.16343" />
<package id="jQuery.vsdoc" version="1.6" /> <package id="jQuery.vsdoc" version="1.6" />
<package id="LowercaseRoutesMVC" version="1.0.3" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
<package id="MiniProfiler" version="2.0.2" /> <package id="MiniProfiler" version="2.0.2" />
<package id="MiniProfiler.MVC3" version="2.0.2" /> <package id="MiniProfiler.MVC3" version="2.0.2" />

@ -0,0 +1,144 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>LowercaseRoutesMVC</name>
</assembly>
<members>
<member name="T:LowercaseRoutesMVC.RouteCollectionExtensions">
<summary>
Contains extension methods to map routes to lowercase URLs.
</summary>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String)">
<summary>
Maps the specified URL route using a lowercase URL. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String,System.Object)">
<summary>
Maps the specified URL route using a lowercase URL and sets default route values. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String,System.String[])">
<summary>
Maps the specified URL route using a lowercase URL and sets the namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String,System.Object,System.Object)">
<summary>
Maps the specified URL route using a lowercase URL and sets default route values and constraints. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="constraints">A set of expressions that specify valid values for a URL parameter.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String,System.Object,System.String[])">
<summary>
Maps the specified URL route using a lowercase URL and sets default route values and namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.RouteCollectionExtensions.MapRouteLowercase(System.Web.Routing.RouteCollection,System.String,System.String,System.Object,System.Object,System.String[])">
<summary>
Maps the specified URL route and sets default route values, constraints, and namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="routes">A collection of routes for the application.</param>
<param name="name">The name of the route to map.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="constraints">A set of expressions that specify valid values for a URL parameter.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="T:LowercaseRoutesMVC.AreaRegistrationContextExtensions">
<summary>
Contains extension methods to map routes in Areas to lowercase URLs.
</summary>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String)">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String,System.Object)">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property, using the specified route default values. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String,System.String[])">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property, using the specified namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String,System.Object,System.Object)">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property, using the specified route default values and constraints. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="constraints">A set of expressions that specify valid values for a URL parameter.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String,System.Object,System.String[])">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property, using the specified route default values and namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
<member name="M:LowercaseRoutesMVC.AreaRegistrationContextExtensions.MapRouteLowercase(System.Web.Mvc.AreaRegistrationContext,System.String,System.String,System.Object,System.Object,System.String[])">
<summary>
Maps the specified URL route using a lowercase URL and associates it with the area that is specified by the AreaName property, using the specified route default values, constraints, and namespaces. Does not change casing in the querystring, if any.
</summary>
<param name="context">The context that encapsulates the information that is required in order to register an area within an ASP.NET MVC application.</param>
<param name="name">The name of the route.</param>
<param name="url">The URL pattern for the route.</param>
<param name="defaults">An object that contains default route values.</param>
<param name="constraints">A set of expressions that specify valid values for a URL parameter.</param>
<param name="namespaces">A set of namespaces for the application.</param>
<returns>A reference to the mapped route.</returns>
</member>
</members>
</doc>
Loading…
Cancel
Save