diff --git a/NzbDrone.Api/Resolvers/NextAiringResolver.cs b/NzbDrone.Api/Resolvers/NextAiringResolver.cs index ed6e62891..a159b8239 100644 --- a/NzbDrone.Api/Resolvers/NextAiringResolver.cs +++ b/NzbDrone.Api/Resolvers/NextAiringResolver.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.Linq; using AutoMapper; -using NzbDrone.Api.QualityProfiles; -using NzbDrone.Core.Repository.Quality; namespace NzbDrone.Api.Resolvers { @@ -11,7 +8,7 @@ namespace NzbDrone.Api.Resolvers { protected override DateTime? ResolveCore(Core.Tv.Series source) { - if(String.IsNullOrWhiteSpace(source.AirTime) || !source.NextAiring.HasValue) + if (String.IsNullOrWhiteSpace(source.AirTime) || !source.NextAiring.HasValue) return source.NextAiring; return source.NextAiring.Value.Add(Convert.ToDateTime(source.AirTime).TimeOfDay) diff --git a/NzbDrone.Api/Series/SeriesModule.cs b/NzbDrone.Api/Series/SeriesModule.cs index 89b5da5fc..2f9bb9fb1 100644 --- a/NzbDrone.Api/Series/SeriesModule.cs +++ b/NzbDrone.Api/Series/SeriesModule.cs @@ -15,13 +15,15 @@ namespace NzbDrone.Api.Series { public class SeriesModule : NzbDroneApiModule { - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; + private readonly ISeriesRepository _seriesRepository; private readonly JobController _jobProvider; - public SeriesModule(SeriesProvider seriesProvider, JobController jobProvider) + public SeriesModule(ISeriesService seriesService,ISeriesRepository seriesRepository, JobController jobProvider) : base("/Series") { - _seriesProvider = seriesProvider; + _seriesService = seriesService; + _seriesRepository = seriesRepository; _jobProvider = jobProvider; Get["/"] = x => AllSeries(); Get["/{id}"] = x => GetSeries((int)x.id); @@ -33,7 +35,7 @@ namespace NzbDrone.Api.Series private Response AllSeries() { - var series = _seriesProvider.GetAllSeriesWithEpisodeCount().ToList(); + var series = _seriesRepository.All().ToList(); var seriesModels = Mapper.Map, List>(series); return seriesModels.AsResponse(); @@ -41,7 +43,7 @@ namespace NzbDrone.Api.Series private Response GetSeries(int id) { - var series = _seriesProvider.GetSeries(id); + var series = _seriesRepository.Get(id); var seriesModels = Mapper.Map(series); return seriesModels.AsResponse(); @@ -56,7 +58,7 @@ namespace NzbDrone.Api.Series //(we can just create the folder and it won't blow up if it already exists) //We also need to remove any special characters from the filename before attempting to create it - _seriesProvider.AddSeries("", request.Path, request.SeriesId, request.QualityProfileId, null); + _seriesService.AddSeries("", request.Path, request.SeriesId, request.QualityProfileId, null); _jobProvider.QueueJob(typeof(ImportNewSeriesJob)); return new Response { StatusCode = HttpStatusCode.Created }; @@ -66,7 +68,7 @@ namespace NzbDrone.Api.Series { var request = Request.Body.FromJson(); - var series = _seriesProvider.GetSeries(request.Id); + var series = _seriesRepository.Get(request.Id); series.Monitored = request.Monitored; series.SeasonFolder = request.SeasonFolder; @@ -83,12 +85,12 @@ namespace NzbDrone.Api.Series else series.CustomStartDate = null; - _seriesProvider.UpdateSeries(series); + _seriesRepository.Update(series); if (oldPath != series.Path) _jobProvider.QueueJob(typeof(DiskScanJob), new { SeriesId = series.SeriesId }); - _seriesProvider.UpdateSeries(series); + _seriesRepository.Update(series); return request.AsResponse(); } diff --git a/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs b/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs index 154921611..39d3dea58 100644 --- a/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs +++ b/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs @@ -32,6 +32,15 @@ namespace NzbDrone.Common.EnsureThat return param; } + [DebuggerStepThrough] + public static Param IsGreaterThanZero(this Param param) + { + if (param.Value <= 0) + throw ExceptionFactory.CreateForParamValidation(param.Name, ExceptionMessages.EnsureExtensions_IsNotGt.Inject(param.Value, 0)); + + return param; + } + [DebuggerStepThrough] public static Param IsGreaterOrEqualTo(this Param param, int limit) { diff --git a/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs b/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs index 3e5e4de4c..384156e39 100644 --- a/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs +++ b/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test.Datastore [Test] public void should_be_able_to_add() { - Subject.Add(sampleType); + Subject.Insert(sampleType); Subject.All().Should().HaveCount(1); } @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.Datastore [Test] public void should_be_able_to_delete_model() { - Subject.Add(sampleType); + Subject.Insert(sampleType); Subject.All().Should().HaveCount(1); Subject.Delete(sampleType.OID); @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.Datastore [Test] public void should_be_able_to_find_by_id() { - Subject.Add(sampleType); + Subject.Insert(sampleType); Subject.Get(sampleType.OID) .ShouldHave() .AllProperties() diff --git a/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs index 01bf501ab..16a7bcd9c 100644 --- a/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs +++ b/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs @@ -80,7 +80,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -101,7 +101,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -122,7 +122,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -143,7 +143,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -164,7 +164,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -185,7 +185,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -206,7 +206,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -227,7 +227,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(false); @@ -248,7 +248,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -269,7 +269,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -290,7 +290,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -311,7 +311,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -333,7 +333,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -355,7 +355,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); @@ -378,7 +378,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.GetMock().Setup(s => s.Get(1)).Returns(qualityType); - Mocker.GetMock().Setup( + Mocker.GetMock().Setup( s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(true); diff --git a/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs b/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs index f2178b001..cb5183a33 100644 --- a/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs +++ b/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs @@ -59,11 +59,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests var singleEpisodeList = new List { firstEpisode }; var doubleEpisodeList = new List { firstEpisode, secondEpisode }; - Mocker.GetMock().Setup(c => c.GetEpisodesByParseResult(parseResultSingle)).Returns(singleEpisodeList); - Mocker.GetMock().Setup(c => c.GetEpisodesByParseResult(parseResultMulti)).Returns(doubleEpisodeList); + Mocker.GetMock().Setup(c => c.GetEpisodesByParseResult(parseResultSingle)).Returns(singleEpisodeList); + Mocker.GetMock().Setup(c => c.GetEpisodesByParseResult(parseResultMulti)).Returns(doubleEpisodeList); - Mocker.GetMock().Setup(c => c.FindSeries(parseResultMulti.CleanTitle)).Returns(fakeSeries); - Mocker.GetMock().Setup(c => c.FindSeries(parseResultSingle.CleanTitle)).Returns(fakeSeries); + Mocker.GetMock().Setup(c => c.GetByTitle(parseResultMulti.CleanTitle)).Returns(fakeSeries); + Mocker.GetMock().Setup(c => c.GetByTitle(parseResultSingle.CleanTitle)).Returns(fakeSeries); } private void WithFirstEpisodeIgnored() @@ -95,8 +95,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void not_in_db_should_be_skipped() { - Mocker.GetMock() - .Setup(p => p.FindSeries(It.IsAny())) + Mocker.GetMock() + .Setup(p => p.GetByTitle(It.IsAny())) .Returns(null); monitoredEpisodeSpecification.IsSatisfiedBy(parseResultMulti).Should().BeFalse(); diff --git a/NzbDrone.Core.Test/DecisionEngineTests/UpgradePossibleSpecificationFixture.cs b/NzbDrone.Core.Test/DecisionEngineTests/UpgradePossibleSpecificationFixture.cs index 724e331a3..92cedd7f5 100644 --- a/NzbDrone.Core.Test/DecisionEngineTests/UpgradePossibleSpecificationFixture.cs +++ b/NzbDrone.Core.Test/DecisionEngineTests/UpgradePossibleSpecificationFixture.cs @@ -39,10 +39,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .Build(); _episode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) .With(e => e.SeriesId = _series.SeriesId) .With(e => e.Series = _series) - .With(e => e.EpisodeFileId = _episodeFile.EpisodeFileId) .With(e => e.EpisodeFile = _episodeFile) .Build(); } @@ -51,7 +49,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public void IsUpgradePossible_should_return_true_if_no_episode_file_exists() { var episode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) + .With(e => e.EpisodeFile = null) .Build(); //Act diff --git a/NzbDrone.Core.Test/EpisodeStatusTest.cs b/NzbDrone.Core.Test/EpisodeStatusTest.cs index 2a815b648..33e333e01 100644 --- a/NzbDrone.Core.Test/EpisodeStatusTest.cs +++ b/NzbDrone.Core.Test/EpisodeStatusTest.cs @@ -23,13 +23,12 @@ namespace NzbDrone.Core.Test Episode episode = Builder.CreateNew() .With(e => e.AirDate = DateTime.Now.AddDays(offsetDays)) .With(e => e.Ignored = ignored) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = null) .Build(); if (hasEpisodes) { - episode.EpisodeFileId = 12; + episode.EpisodeFile = new EpisodeFile(); } Assert.AreEqual(status, episode.Status); @@ -43,14 +42,13 @@ namespace NzbDrone.Core.Test { Episode episode = Builder.CreateNew() .With(e => e.Ignored = ignored) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = DateTime.Now.AddDays(-2).AddHours(-1)) .With(e => e.AirDate = DateTime.Today.AddDays(-2)) .Build(); if (hasEpisodes) { - episode.EpisodeFileId = 12; + episode.EpisodeFile = new EpisodeFile(); } episode.Status.Should().Be(status); @@ -67,13 +65,12 @@ namespace NzbDrone.Core.Test Episode episode = Builder.CreateNew() .With(e => e.AirDate = DateTime.Now.AddDays(offsetDays)) .With(e => e.Ignored = ignored) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = DateTime.Now.AddHours(22)) .Build(); if (hasEpisodes) { - episode.EpisodeFileId = 12; + episode.EpisodeFile = new EpisodeFile(); } Assert.AreEqual(status, episode.Status); @@ -85,13 +82,12 @@ namespace NzbDrone.Core.Test Episode episode = Builder.CreateNew() .With(e => e.AirDate = DateTime.Now.AddDays(offsetDays)) .With(e => e.Ignored = ignored) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = null) .Build(); if (hasEpisodes) { - episode.EpisodeFileId = 12; + episode.EpisodeFile = new EpisodeFile(); } Assert.AreEqual(status, episode.Status); @@ -103,7 +99,6 @@ namespace NzbDrone.Core.Test Episode episode = Builder.CreateNew() .With(e => e.AirDate = DateTime.Now.AddDays(20)) .With(e => e.Ignored = false) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = null) .Build(); @@ -120,14 +115,13 @@ namespace NzbDrone.Core.Test { Episode episode = Builder.CreateNew() .With(e => e.Ignored = ignored) - .With(e => e.EpisodeFileId = 0) .With(e => e.GrabDate = DateTime.Now.AddHours(22)) .With(e => e.PostDownloadStatus = postDownloadStatus) .Build(); if (hasEpisodes) { - episode.EpisodeFileId = 12; + episode.EpisodeFile = new EpisodeFile(); } Assert.AreEqual(status, episode.Status); diff --git a/NzbDrone.Core.Test/JobTests/BacklogSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/BacklogSearchJobTest.cs index 981603408..f743a1a83 100644 --- a/NzbDrone.Core.Test/JobTests/BacklogSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BacklogSearchJobTest.cs @@ -35,7 +35,7 @@ namespace NzbDrone.Core.Test.JobTests WithStrictMocker(); WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -67,7 +67,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); Mocker.GetMock() @@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -129,10 +129,10 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); //Act @@ -163,10 +163,10 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(episodes.Select(e => e.EpisodeNumber).ToList()); //Act @@ -205,10 +205,10 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(new List { 1, 2, 3, 4, 5 }); //Act @@ -246,7 +246,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -285,7 +285,7 @@ namespace NzbDrone.Core.Test.JobTests //WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -325,7 +325,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act diff --git a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs index 333ebfee9..3fb2aae70 100644 --- a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs @@ -1,17 +1,12 @@ -using System.IO; -using System.Net; - -using FizzWare.NBuilder; +using FizzWare.NBuilder; using Moq; using NUnit.Framework; -using NzbDrone.Common; using NzbDrone.Core.Tv; using NzbDrone.Core.Jobs; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Providers; -using NzbDrone.Core.Providers.Core; -using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; +using System.Linq; namespace NzbDrone.Core.Test.JobTests { @@ -53,9 +48,9 @@ namespace NzbDrone.Core.Test.JobTests WithSuccessfulDownload(); var series = Builder.CreateListOfSize(5) - .Build(); + .Build().ToList(); - Mocker.GetMock().Setup(s => s.GetAllSeries()) + Mocker.GetMock().Setup(s => s.All()) .Returns(series); Mocker.Resolve().Start(_notification, null); @@ -70,9 +65,9 @@ namespace NzbDrone.Core.Test.JobTests var series = Builder.CreateListOfSize(5) .TheFirst(2) .With(s => s.BannerUrl = null) - .Build(); + .Build().ToList(); - Mocker.GetMock().Setup(s => s.GetAllSeries()) + Mocker.GetMock().Setup(s => s.All()) .Returns(series); Mocker.Resolve().Start(_notification, null); @@ -87,7 +82,7 @@ namespace NzbDrone.Core.Test.JobTests var series = Builder.CreateNew() .Build(); - Mocker.GetMock().Setup(s => s.GetSeries(series.SeriesId)) + Mocker.GetMock().Setup(s => s.Get(series.SeriesId)) .Returns(series); Mocker.Resolve().Start(_notification, new { SeriesId = series.SeriesId }); diff --git a/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs b/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs index eead3c6b8..ce6d40b03 100644 --- a/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs @@ -14,6 +14,7 @@ using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; using NzbDrone.Test.Common.AutoMoq; +using System.Linq; namespace NzbDrone.Core.Test.JobTests { @@ -28,9 +29,10 @@ namespace NzbDrone.Core.Test.JobTests .With(s => s.SeriesId = 12) .Build(); - Mocker.GetMock() - .Setup(p => p.GetSeries(series.SeriesId)) - .Returns(series); + + Mocker.GetMock() + .Setup(p => p.Get(series.SeriesId)); + Mocker.GetMock() .Setup(p => p.Scan(series)) @@ -51,10 +53,10 @@ namespace NzbDrone.Core.Test.JobTests var series = Builder.CreateListOfSize(2) .TheFirst(1).With(s => s.SeriesId = 12) .TheNext(1).With(s => s.SeriesId = 15) - .Build(); + .Build().ToList(); - Mocker.GetMock() - .Setup(p => p.GetAllSeries()) + Mocker.GetMock() + .Setup(p => p.All()) .Returns(series); Mocker.GetMock() @@ -77,10 +79,10 @@ namespace NzbDrone.Core.Test.JobTests var series = Builder.CreateListOfSize(2) .TheFirst(1).With(s => s.SeriesId = 12) .TheNext(1).With(s => s.SeriesId = 15) - .Build(); + .Build().ToList(); - Mocker.GetMock() - .Setup(p => p.GetAllSeries()) + Mocker.GetMock() + .Setup(p => p.All()) .Returns(series); Mocker.GetMock() @@ -104,10 +106,10 @@ namespace NzbDrone.Core.Test.JobTests var series = Builder.CreateListOfSize(2) .TheFirst(1).With(s => s.SeriesId = 12) .TheNext(1).With(s => s.SeriesId = 15) - .Build(); + .Build().ToList(); - Mocker.GetMock() - .Setup(p => p.GetAllSeries()) + Mocker.GetMock() + .Setup(p => p.All()) .Returns(series); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs b/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs index df6aea9a4..073124949 100644 --- a/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs @@ -34,8 +34,8 @@ namespace NzbDrone.Core.Test.JobTests WithStrictMocker(); - Mocker.GetMock() - .Setup(p => p.GetAllSeries()) + Mocker.GetMock() + .Setup(p => p.All()) .Returns(series); @@ -61,11 +61,11 @@ namespace NzbDrone.Core.Test.JobTests .Setup(j => j.Start(notification, It.Is(d => d.GetPropertyValue("SeriesId") == series[1].SeriesId))) .Callback(() => series[1].LastInfoSync = DateTime.Now); - Mocker.GetMock() - .Setup(s => s.GetSeries(series[0].SeriesId)).Returns(series[0]); + Mocker.GetMock() + .Setup(s => s.Get(series[0].SeriesId)).Returns(series[0]); - Mocker.GetMock() - .Setup(s => s.GetSeries(series[1].SeriesId)).Returns(series[1]); + Mocker.GetMock() + .Setup(s => s.Get(series[1].SeriesId)).Returns(series[1]); Mocker.GetMock() .Setup(s => s.GetSeriesFiles(It.IsAny())).Returns(new List()); @@ -99,8 +99,8 @@ namespace NzbDrone.Core.Test.JobTests WithStrictMocker(); - Mocker.GetMock() - .Setup(p => p.GetAllSeries()) + Mocker.GetMock() + .Setup(p => p.All()) .Returns(series); Mocker.GetMock() @@ -118,8 +118,8 @@ namespace NzbDrone.Core.Test.JobTests Mocker.GetMock() .Setup(j => j.Start(notification, It.Is(d => d.GetPropertyValue("SeriesId") == series[0].SeriesId))); - Mocker.GetMock() - .Setup(s => s.GetSeries(series[0].SeriesId)).Returns(series[0]); + Mocker.GetMock() + .Setup(s => s.Get(series[0].SeriesId)).Returns(series[0]); Mocker.GetMock() .Setup(s => s.GetSeriesFiles(It.IsAny())).Returns(new List()); @@ -152,14 +152,14 @@ namespace NzbDrone.Core.Test.JobTests .Setup(p => p.GetSeriesFiles(seriesId)) .Returns(new List()); - Mocker.GetMock() - .Setup(p => p.GetSeasons(seriesId)) + Mocker.GetMock() + .Setup(p => p.GetSeasonNumbers(seriesId)) .Returns(new List { 0, 1, 2, 3, 4 }); Mocker.Resolve().AutoIgnoreSeasons(seriesId); - Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, It.IsAny(), It.IsAny()), Times.Never()); + Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, It.IsAny(), It.IsAny()), Times.Never()); } [Test] @@ -180,13 +180,13 @@ namespace NzbDrone.Core.Test.JobTests .Setup(p => p.GetSeriesFiles(seriesId)) .Returns(episodesFiles); - Mocker.GetMock() - .Setup(p => p.GetSeasons(seriesId)) + Mocker.GetMock() + .Setup(p => p.GetSeasonNumbers(seriesId)) .Returns(new List { 0, 1, 2 }); Mocker.Resolve().AutoIgnoreSeasons(seriesId); - Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 2, It.IsAny()), Times.Never()); + Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 2, It.IsAny()), Times.Never()); } [Test] @@ -206,15 +206,15 @@ namespace NzbDrone.Core.Test.JobTests .Setup(p => p.GetSeriesFiles(seriesId)) .Returns(episodesFiles); - Mocker.GetMock() - .Setup(p => p.GetSeasons(seriesId)) + Mocker.GetMock() + .Setup(p => p.GetSeasonNumbers(seriesId)) .Returns(new List { 0, 1, 2 }); Mocker.Resolve().AutoIgnoreSeasons(seriesId); - Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 0, true), Times.Once()); - Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 1, true), Times.Never()); - Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 2, It.IsAny()), Times.Never()); + Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 0, true), Times.Once()); + Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 1, true), Times.Never()); + Mocker.GetMock().Verify(p => p.SetIgnore(seriesId, 2, It.IsAny()), Times.Never()); } } diff --git a/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs b/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs index 99c7686e4..357a66c32 100644 --- a/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs +++ b/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs @@ -41,13 +41,13 @@ namespace NzbDrone.Core.Test.JobTests Subject.Init(); Storage.All().Should().HaveCount(1); - Storage.All()[0].Interval.Should().Be((Int32)_fakeJob.DefaultInterval.TotalMinutes); - Storage.All()[0].Name.Should().Be(_fakeJob.Name); - Storage.All()[0].TypeName.Should().Be(_fakeJob.GetType().ToString()); - Storage.All()[0].LastExecution.Should().HaveYear(DateTime.Now.Year); - Storage.All()[0].LastExecution.Should().HaveMonth(DateTime.Now.Month); - Storage.All()[0].LastExecution.Should().HaveDay(DateTime.Today.Day); - Storage.All()[0].Enable.Should().BeTrue(); + Storage.All().ToList()[0].Interval.Should().Be((Int32)_fakeJob.DefaultInterval.TotalMinutes); + Storage.All().ToList()[0].Name.Should().Be(_fakeJob.Name); + Storage.All().ToList()[0].TypeName.Should().Be(_fakeJob.GetType().ToString()); + Storage.All().ToList()[0].LastExecution.Should().HaveYear(DateTime.Now.Year); + Storage.All().ToList()[0].LastExecution.Should().HaveMonth(DateTime.Now.Month); + Storage.All().ToList()[0].LastExecution.Should().HaveDay(DateTime.Today.Day); + Storage.All().ToList()[0].Enable.Should().BeTrue(); } [Test] @@ -108,14 +108,14 @@ namespace NzbDrone.Core.Test.JobTests .With(c => c.LastExecution = DateTime.Now.AddDays(-7).Date) .Build(); - Storage.Add(oldJob); + Storage.Insert(oldJob); var newJob = new FakeJob(); IEnumerable fakeJobs = new List { newJob }; Mocker.SetConstant(fakeJobs); - Subject.Init(); + Subject.Init(); var registeredJobs = Storage.All(); @@ -142,20 +142,20 @@ namespace NzbDrone.Core.Test.JobTests Storage.All().First().Enable.Should().BeFalse(); } -/* [Test] - public void disabled_jobs_arent_run_by_scheduler() - { - IEnumerable BaseFakeJobs = new List { disabledJob }; - Mocker.SetConstant(BaseFakeJobs); + /* [Test] + public void disabled_jobs_arent_run_by_scheduler() + { + IEnumerable BaseFakeJobs = new List { disabledJob }; + Mocker.SetConstant(BaseFakeJobs); - var jobProvider = Mocker.Resolve(); - jobProvider.QueueScheduled(); + var jobProvider = Mocker.Resolve(); + jobProvider.QueueScheduled(); - WaitForQueue(); + WaitForQueue(); - disabledJob.ExecutionCount.Should().Be(0); - }*/ + disabledJob.ExecutionCount.Should().Be(0); + }*/ } } diff --git a/NzbDrone.Core.Test/JobTests/RecentBacklogSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/RecentBacklogSearchJobTest.cs index d6421ac02..d3c21adc4 100644 --- a/NzbDrone.Core.Test/JobTests/RecentBacklogSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/RecentBacklogSearchJobTest.cs @@ -39,7 +39,7 @@ namespace NzbDrone.Core.Test.JobTests //Setup var episodes = new List(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -86,7 +86,7 @@ namespace NzbDrone.Core.Test.JobTests .With(e => e.AirDate = DateTime.Today.AddDays(-35)) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); Mocker.GetMock().Setup(c => c.Start(It.IsAny(), It.Is(d => d.GetPropertyValue("EpisodeId") >= 0))); @@ -122,7 +122,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -161,7 +161,7 @@ namespace NzbDrone.Core.Test.JobTests //WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act @@ -201,7 +201,7 @@ namespace NzbDrone.Core.Test.JobTests WithEnableBacklogSearching(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes); //Act diff --git a/NzbDrone.Core.Test/JobTests/RenameSeasonJobFixture.cs b/NzbDrone.Core.Test/JobTests/RenameSeasonJobFixture.cs index f23dabd8d..2fafa2cce 100644 --- a/NzbDrone.Core.Test/JobTests/RenameSeasonJobFixture.cs +++ b/NzbDrone.Core.Test/JobTests/RenameSeasonJobFixture.cs @@ -36,8 +36,8 @@ namespace NzbDrone.Core.Test.JobTests .With(e => e.SeasonNumber = 5) .Build(); - Mocker.GetMock() - .Setup(s => s.GetSeries(_series.SeriesId)) + Mocker.GetMock() + .Setup(s => s.Get(_series.SeriesId)) .Returns(_series); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs index 41f0e54cb..0ac909d70 100644 --- a/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs @@ -39,7 +39,7 @@ namespace NzbDrone.Core.Test.JobTests .With(e => e.AirDate = DateTime.Today.AddDays(-1)) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetEpisodesBySeason(1, 1)).Returns(_episodes); } @@ -92,7 +92,7 @@ namespace NzbDrone.Core.Test.JobTests .With(e => e.AirDate = DateTime.Today.AddDays(2)) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetEpisodesBySeason(1, 1)).Returns(episodes); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs index d7841271a..c3a4ced3d 100644 --- a/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs @@ -25,10 +25,10 @@ namespace NzbDrone.Core.Test.JobTests var notification = new ProgressNotification("Series Search"); - Mocker.GetMock() - .Setup(c => c.GetSeasons(1)).Returns(seasons); + Mocker.GetMock() + .Setup(c => c.GetSeasonNumbers(1)).Returns(seasons); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.IsIgnored(It.IsAny(), It.IsAny())).Returns(false); Mocker.GetMock() @@ -52,8 +52,8 @@ namespace NzbDrone.Core.Test.JobTests var notification = new ProgressNotification("Series Search"); - Mocker.GetMock() - .Setup(c => c.GetSeasons(1)).Returns(seasons); + Mocker.GetMock() + .Setup(c => c.GetSeasonNumbers(1)).Returns(seasons); //Act Mocker.Resolve().Start(notification, new { SeriesId = 1 }); @@ -67,8 +67,8 @@ namespace NzbDrone.Core.Test.JobTests [Test] public void SeriesSearch_should_not_search_for_season_0() { - Mocker.GetMock() - .Setup(c => c.GetSeasons(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.GetSeasonNumbers(It.IsAny())) .Returns(new List { 0, 1, 2 }); Mocker.Resolve().Start(MockNotification, new { SeriesId = 12 }); diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 19920a8ef..a51792ca9 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -236,7 +236,6 @@ - diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpDropFolderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpDropFolderFixture.cs index 431d1185e..3be624d2e 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpDropFolderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpDropFolderFixture.cs @@ -62,7 +62,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests //Assert Mocker.GetMock().Verify(v => v.GetFileByPath(filename), Times.Once()); - Mocker.GetMock().Verify(v => v.GetSeries(It.IsAny()), Times.Never()); + Mocker.GetMock().Verify(v => v.Get(It.IsAny()), Times.Never()); } [Test] @@ -88,7 +88,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests var episode = Builder.CreateListOfSize(1) .All() .With(e => e.SeriesId = seriesId) - .With(e => e.EpisodeFileId = episodeFile.EpisodeFileId) + .With(e => e.EpisodeFile = episodeFile) .Build(); Mocker.GetMock().Setup(v => v.GetFileByPath(filename)) @@ -100,10 +100,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.GetMock().Setup(s => s.GetFileByPath(filename)) .Returns(episodeFile); - Mocker.GetMock().Setup(s => s.GetSeries(It.IsAny())) + Mocker.GetMock().Setup(s => s.Get(It.IsAny())) .Returns(series); - Mocker.GetMock().Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) + Mocker.GetMock().Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) .Returns(episode); Mocker.GetMock().Setup(s => s.GetNewFilename(It.IsAny>(), series, QualityTypes.Unknown, false, It.IsAny())) diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpFixture.cs index 2342ae46e..a624b544e 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/CleanUpFixture.cs @@ -49,7 +49,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(e => e.FileExists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByFileId(It.IsAny())) .Returns(new List()); @@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests //Assert Mocker.VerifyAllMocks(); - Mocker.GetMock() + Mocker.GetMock() .Verify(e => e.GetEpisodesByFileId(It.IsAny()), Times.Exactly(10)); Mocker.GetMock() @@ -80,11 +80,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(e => e.FileExists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByFileId(It.IsAny())) - .Returns(new List { new Episode { EpisodeFileId = 10 }, new Episode { EpisodeFileId = 10 } }); + .Returns(new List { new Episode { EpisodeFile = new EpisodeFile { EpisodeFileId = 10 } }, new Episode { EpisodeFile = new EpisodeFile { EpisodeFileId = 10 } } }); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.UpdateEpisode(It.IsAny())); Mocker.GetMock() @@ -100,11 +100,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests //Assert Mocker.VerifyAllMocks(); - Mocker.GetMock() + Mocker.GetMock() .Verify(e => e.GetEpisodesByFileId(It.IsAny()), Times.Exactly(10)); - Mocker.GetMock() - .Verify(e => e.UpdateEpisode(It.Is(g=>g.EpisodeFileId == 0)), Times.Exactly(20)); + Mocker.GetMock() + .Verify(e => e.UpdateEpisode(It.Is(g => g.EpisodeFileId == 0)), Times.Exactly(20)); Mocker.GetMock() .Verify(e => e.Delete(It.IsAny()), Times.Exactly(10)); diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs index f4a2bb0b0..bf6d88002 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests { _series = Builder .CreateNew() - .With(s => s.IsDaily = false) + .With(s => s.SeriesType = SeriesType.Standard) .Build(); } @@ -49,7 +49,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests public void WithDailySeries() { - _series.IsDaily = true; + _series.SeriesType = SeriesType.Daily; } [Test] @@ -67,7 +67,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); //Act @@ -94,7 +94,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests With80MBFile(); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); //Act @@ -124,7 +124,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); //Act @@ -194,7 +194,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetEpisodesByParseResult(It.IsAny())) .Returns(new List()); @@ -225,7 +225,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); //Act @@ -257,7 +257,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(fakeEpisodes); //Act @@ -290,7 +290,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(fakeEpisodes); //Act @@ -328,7 +328,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode1, fakeEpisode2 }); //Act @@ -348,8 +348,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeEpisode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) .Build(); //Mocks @@ -359,7 +357,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(p => p.Exists(It.IsAny())) .Returns(false); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode}); //Act @@ -382,7 +380,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests With80MBFile(); - Mocker.GetMock().Setup(s => s.GetEpisodesByParseResult(It.IsAny())) + Mocker.GetMock().Setup(s => s.GetEpisodesByParseResult(It.IsAny())) .Returns(new List()); Mocker.GetMock().Setup(s => s.IsChildOfPath(path, series.Path)) @@ -390,7 +388,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.Resolve().ImportFile(series, path); - Mocker.Verify(s => s.GetEpisodesByParseResult(It.Is(p => p.SceneSource)), Times.Once()); + Mocker.Verify(s => s.GetEpisodesByParseResult(It.Is(p => p.SceneSource)), Times.Once()); } [Test] @@ -405,7 +403,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests With80MBFile(); - Mocker.GetMock().Setup(s => s.GetEpisodesByParseResult(It.IsAny())) + Mocker.GetMock().Setup(s => s.GetEpisodesByParseResult(It.IsAny())) .Returns(new List()); Mocker.GetMock().Setup(s => s.IsChildOfPath(path, series.Path)) @@ -413,7 +411,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.Resolve().ImportFile(series, path); - Mocker.Verify(s => s.GetEpisodesByParseResult(It.Is(p => p.SceneSource == false)), Times.Once()); + Mocker.Verify(s => s.GetEpisodesByParseResult(It.Is(p => p.SceneSource == false)), Times.Once()); } [Test] @@ -440,8 +438,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests public void should_import_if_file_size_is_under_70MB_but_runTime_over_3_minutes() { var fakeEpisode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) .Build(); const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; @@ -458,7 +454,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(s => s.GetRunTime(path)) .Returns(600); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); var result = Mocker.Resolve().ImportFile(_series, path); @@ -473,8 +469,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests With80MBFile(); var fakeEpisode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) .Build(); const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; @@ -487,7 +481,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(s => s.GetRunTime(path)) .Returns(60); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); var result = Mocker.Resolve().ImportFile(_series, path); @@ -502,8 +496,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests With80MBFile(); var fakeEpisode = Builder.CreateNew() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) .Build(); const string path = @"C:\Test\TV\30.rock.s00e01.pre-pilot.avi"; @@ -520,7 +512,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(s => s.GetRunTime(path)) .Returns(60); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); var result = Mocker.Resolve().ImportFile(_series, path); @@ -560,16 +552,16 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Once()); //Get the count of episodes linked - var count = Mocker.GetMock().Object.GetEpisodesByParseResult(null).Count; + var count = Mocker.GetMock().Object.GetEpisodesByParseResult(null).Count; - Mocker.GetMock().Verify(p => p.UpdateEpisode(It.Is(e => e.EpisodeFileId == result.EpisodeFileId)), Times.Exactly(count)); + Mocker.GetMock().Verify(p => p.UpdateEpisode(It.Is(e => e.EpisodeFileId == result.EpisodeFileId)), Times.Exactly(count)); } private static void VerifySkipImport(EpisodeFile result, AutoMoqer Mocker) { result.Should().BeNull(); Mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Never()); - Mocker.GetMock().Verify(p => p.UpdateEpisode(It.IsAny()), Times.Never()); + Mocker.GetMock().Verify(p => p.UpdateEpisode(It.IsAny()), Times.Never()); Mocker.GetMock().Verify(p => p.DeleteFile(It.IsAny()), Times.Never()); } } diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs index 3f7ac8b6a..75e0ec1e3 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs @@ -46,11 +46,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .With(f => f.Path = fi.FullName) .Build(); - Mocker.GetMock() - .Setup(e => e.GetSeries(fakeSeries.SeriesId)) + Mocker.GetMock() + .Setup(e => e.Get(fakeSeries.SeriesId)) .Returns(fakeSeries); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Returns(fakeEpisode); @@ -96,11 +96,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .With(f => f.Proper = false) .Build(); - Mocker.GetMock() - .Setup(e => e.GetSeries(fakeSeries.SeriesId)) + Mocker.GetMock() + .Setup(e => e.Get(fakeSeries.SeriesId)) .Returns(fakeSeries); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Returns(fakeEpisode); @@ -159,11 +159,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .With(f => f.Proper = false) .Build(); - Mocker.GetMock() - .Setup(e => e.GetSeries(fakeSeries.SeriesId)) + Mocker.GetMock() + .Setup(e => e.Get(fakeSeries.SeriesId)) .Returns(fakeSeries); - Mocker.GetMock() + Mocker.GetMock() .Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Returns(fakeEpisode); diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ScanFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ScanFixture.cs index 953b7e274..9407f84d3 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ScanFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ScanFixture.cs @@ -1,22 +1,13 @@ -using System; -using System.Collections.Generic; -using System.IO; +using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using FizzWare.NBuilder; -using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Tv; -using NzbDrone.Core.Model; using NzbDrone.Core.Providers; -using NzbDrone.Core.Providers.Core; -using NzbDrone.Core.Repository; -using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; -using NzbDrone.Test.Common.AutoMoq; namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests { @@ -27,12 +18,12 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests public void series_should_update_the_last_scan_date() { - - Mocker.GetMock() - .Setup(c => c.UpdateSeries(It.Is(s => s.LastDiskSync != null))).Verifiable(); - Mocker.GetMock() - .Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.Update(It.Is(s => s.LastDiskSync != null))).Verifiable(); + + Mocker.GetMock() + .Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List { new Episode() }); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs index da6660802..aae6fb704 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadClientTests/SabProviderTests/QueueFixture.cs @@ -148,7 +148,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadClientTests.SabProviderTests { Quality = new QualityModel { Quality = QualityTypes.Bluray720p, Proper = false }, 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"), SeriesType = SeriesType.Daily }, }; diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTests/DownloadProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTests/DownloadProviderFixture.cs index c2da04329..d441db880 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTests/DownloadProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTests/DownloadProviderFixture.cs @@ -41,12 +41,12 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadProviderTests private EpisodeParseResult SetupParseResult() { var episodes = Builder.CreateListOfSize(2) - .TheFirst(1).With(s => s.EpisodeId = 12) - .TheNext(1).With(s => s.EpisodeId = 99) + .TheFirst(1).With(s => s.OID = 12) + .TheNext(1).With(s => s.OID = 99) .All().With(s => s.SeriesId = 5) .Build().ToList(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetEpisodesByParseResult(It.IsAny())).Returns(episodes); return Builder.CreateNew() @@ -104,10 +104,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadProviderTests Mocker.GetMock() .Verify(s => s.Add(It.Is(h => h.EpisodeId == 99 && h.SeriesId == 5)), Times.Once()); - Mocker.GetMock() + Mocker.GetMock() .Verify(c => c.MarkEpisodeAsFetched(12)); - Mocker.GetMock() + Mocker.GetMock() .Verify(c => c.MarkEpisodeAsFetched(99)); Mocker.GetMock() @@ -139,10 +139,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadProviderTests Mocker.GetMock() .Verify(s => s.Add(It.Is(h => h.EpisodeId == 99 && h.SeriesId == 5)), Times.Once()); - Mocker.GetMock() + Mocker.GetMock() .Verify(c => c.MarkEpisodeAsFetched(12)); - Mocker.GetMock() + Mocker.GetMock() .Verify(c => c.MarkEpisodeAsFetched(99)); Mocker.GetMock() @@ -165,7 +165,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadProviderTests .Verify(s => s.Add(It.IsAny()), Times.Never()); - Mocker.GetMock() + Mocker.GetMock() .Verify(c => c.MarkEpisodeAsFetched(It.IsAny()), Times.Never()); Mocker.GetMock() @@ -242,7 +242,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DownloadProviderTests public string create_proper_sab_daily_titles(bool proper) { var series = Builder.CreateNew() - .With(c => c.IsDaily = true) + .With(c => c.SeriesType = SeriesType.Daily) .With(c => c.Title = "My Series Name") .Build(); diff --git a/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs index d011ab81b..4e6457355 100644 --- a/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs @@ -135,7 +135,7 @@ namespace NzbDrone.Core.Test.ProviderTests var history = Builder.CreateNew() .With(h => h.Quality = QualityTypes.Bluray720p) .With(h => h.IsProper = true) - .With(h => h.EpisodeId = historyEpisode.EpisodeId) + .With(h => h.EpisodeId = historyEpisode.OID) .Build(); Db.Insert(history); @@ -162,7 +162,7 @@ namespace NzbDrone.Core.Test.ProviderTests var history = Builder .CreateListOfSize(5) .All() - .With(h => h.EpisodeId = historyEpisode.EpisodeId) + .With(h => h.EpisodeId = historyEpisode.OID) .With(h => h.SeriesId = historyEpisode.SeriesId) .TheFirst(1) .With(h => h.Quality = QualityTypes.DVD) @@ -205,7 +205,7 @@ namespace NzbDrone.Core.Test.ProviderTests var history = Builder .CreateListOfSize(5) .All() - .With(h => h.EpisodeId = historyEpisode.EpisodeId) + .With(h => h.EpisodeId = historyEpisode.OID) .With(h => h.SeriesId = historyEpisode.SeriesId) .TheFirst(1) .With(h => h.Quality = QualityTypes.DVD) @@ -250,7 +250,7 @@ namespace NzbDrone.Core.Test.ProviderTests var history = new History { Date = DateTime.Now, - EpisodeId = episode.EpisodeId, + EpisodeId = episode.OID, SeriesId = episode.SeriesId, NzbTitle = "my title", Indexer = "Fake Indexer", diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTest.cs index ef5a71367..c85e2409b 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTest.cs @@ -83,7 +83,7 @@ namespace NzbDrone.Core.Test.ProviderTests { WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetEpisodeBySeries(12)) .Returns(new List()); diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/CleanUpDatabaseFixture.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/CleanUpDatabaseFixture.cs index 888ea370d..9e54e4865 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/CleanUpDatabaseFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/CleanUpDatabaseFixture.cs @@ -96,7 +96,6 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests .All().With(c => c.GrabDate = DateTime.Now) .And(c => c.Ignored = false) .And(c => c.PostDownloadStatus = PostDownloadStatusType.NoError) - .And(c => c.EpisodeFileId = 0) .Build(); Db.InsertMany(episodes); diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/GetNewFilenameFixture.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/GetNewFilenameFixture.cs index 2db8ef181..3a2ca17c1 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/GetNewFilenameFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests/GetNewFilenameFixture.cs @@ -765,7 +765,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests var series = Builder .CreateNew() - .With(s => s.IsDaily = true) + .With(s => s.SeriesType = SeriesType.Daily) .With(s => s.Title = "The Daily Show with Jon Stewart") .Build(); @@ -794,7 +794,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests var series = Builder .CreateNew() - .With(s => s.IsDaily = true) + .With(s => s.SeriesType = SeriesType.Daily) .With(s => s.Title = "The Daily Show with Jon Stewart") .Build(); @@ -823,7 +823,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests var series = Builder .CreateNew() - .With(s => s.IsDaily = true) + .With(s => s.SeriesType = SeriesType.Daily) .With(s => s.Title = "The Daily Show with Jon Stewart") .Build(); diff --git a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs index b408e3c83..53514b2cf 100644 --- a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs @@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(e => e.EpisodeNumber = 1) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) .Returns(new List { episode }); } @@ -117,7 +117,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(e => e.SeasonNumber = 1) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) .Returns(episodes.ToList()); } diff --git a/NzbDrone.Core.Test/ProviderTests/MisnamedProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/MisnamedProviderTest.cs index 8227d6eed..057692518 100644 --- a/NzbDrone.Core.Test/ProviderTests/MisnamedProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/MisnamedProviderTest.cs @@ -37,16 +37,14 @@ namespace NzbDrone.Core.Test.ProviderTests .All() .With(e => e.Series = series) .TheFirst(1) - .With(e => e.EpisodeFileId = 1) .With(e => e.EpisodeFile = episodeFiles[0]) .TheNext(1) - .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = episodeFiles[1]) .Build(); WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.EpisodesWithFiles()).Returns(episodes); Mocker.GetMock() @@ -86,16 +84,14 @@ namespace NzbDrone.Core.Test.ProviderTests .All() .With(e => e.Series = series) .TheFirst(1) - .With(e => e.EpisodeFileId = 1) .With(e => e.EpisodeFile = episodeFiles[0]) .TheNext(1) - .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = episodeFiles[1]) .Build(); WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.EpisodesWithFiles()).Returns(episodes); Mocker.GetMock() @@ -135,16 +131,14 @@ namespace NzbDrone.Core.Test.ProviderTests .All() .With(e => e.Series = series) .TheFirst(1) - .With(e => e.EpisodeFileId = 1) .With(e => e.EpisodeFile = episodeFiles[0]) .TheNext(1) - .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = episodeFiles[1]) .Build(); WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.EpisodesWithFiles()).Returns(episodes); Mocker.GetMock() @@ -186,16 +180,14 @@ namespace NzbDrone.Core.Test.ProviderTests .All() .With(e => e.Series = series) .TheFirst(2) - .With(e => e.EpisodeFileId = 1) .With(e => e.EpisodeFile = episodeFiles[0]) .TheNext(1) - .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = episodeFiles[1]) .Build(); WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.EpisodesWithFiles()).Returns(episodes); Mocker.GetMock() @@ -237,16 +229,14 @@ namespace NzbDrone.Core.Test.ProviderTests .All() .With(e => e.Series = series) .TheFirst(2) - .With(e => e.EpisodeFileId = 1) .With(e => e.EpisodeFile = episodeFiles[0]) .TheNext(1) - .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = episodeFiles[1]) .Build(); WithStrictMocker(); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.EpisodesWithFiles()).Returns(episodes); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs index 3d38956b4..70b591abb 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs @@ -47,8 +47,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests private void WithValidSeries() { - Mocker.GetMock() - .Setup(c => c.FindSeries(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.GetByTitle(It.IsAny())) .Returns(fakeSeries); Mocker.GetMock() @@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests droppedFolder.Create(); //Act - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(null).Verifiable(); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(null).Verifiable(); Mocker.Resolve().ProcessDownload(droppedFolder); //Assert @@ -115,7 +115,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var droppedFolder = new DirectoryInfo(@"C:\Test\Unsorted TV\_unpack_The Office - S01E01 - Episode Title"); - Mocker.GetMock().Setup(s => s.FindSeries("office")).Returns(null).Verifiable(); + Mocker.GetMock().Setup(s => s.GetByTitle("office")).Returns(null).Verifiable(); //Act Mocker.Resolve().ProcessDownload(droppedFolder); @@ -167,7 +167,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var taggedFolder = @"C:\Test\Unsorted TV\_UnknownSeries_The Office - S01E01 - Episode Title"; //Act - Mocker.GetMock().Setup(s => s.FindSeries("office")).Returns(null); + Mocker.GetMock().Setup(s => s.GetByTitle("office")).Returns(null); Mocker.GetMock().Setup(s => s.MoveDirectory(droppedFolder.FullName, taggedFolder)); Mocker.Resolve().ProcessDownload(droppedFolder); @@ -193,7 +193,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .Build(); //Act - Mocker.GetMock().Setup(s => s.FindSeries("office")).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle("office")).Returns(fakeSeries); Mocker.GetMock().Setup(s => s.Scan(fakeSeries, droppedFolder.FullName)).Returns(new List()); Mocker.GetMock().Setup(s => s.MoveDirectory(droppedFolder.FullName, taggedFolder)); Mocker.GetMock().Setup(s => s.GetDirectorySize(droppedFolder.FullName)).Returns(Constants.IgnoreFileSize + 10.Megabytes()); @@ -228,7 +228,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .Build().ToList(); //Act - Mocker.GetMock().Setup(s => s.FindSeries("office")).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle("office")).Returns(fakeSeries); Mocker.GetMock().Setup(s => s.MoveDirectory(droppedFolder.FullName, taggedFolder)); Mocker.GetMock().Setup(s => s.GetDirectorySize(droppedFolder.FullName)).Returns(Constants.IgnoreFileSize + 10.Megabytes()); Mocker.GetMock().Setup(s => s.Scan(fakeSeries, droppedFolder.FullName)).Returns(fakeEpisodeFiles); @@ -254,7 +254,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests WithOldWrite(); //Act - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(null); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(null); Mocker.Resolve().ProcessDownload(droppedFolder); //Assert @@ -273,7 +273,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var taggedFolder = TempFolder + @"\_UnknownSeries_The Office - S01E01 - Episode Title"; - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(null); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(null); //Act Mocker.Resolve().ProcessDownload(droppedFolder); @@ -295,7 +295,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests WithImportedFiles(droppedFolder.FullName); - Mocker.GetMock().Setup(s => s.FindSeries("office")).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle("office")).Returns(fakeSeries); Mocker.GetMock().Setup(s => s.CleanUpDropFolder(droppedFolder.FullName)); Mocker.GetMock().Setup(s => s.MoveEpisodeFile(It.IsAny(), true)).Returns(new EpisodeFile()); Mocker.GetMock().Setup(s => s.GetDirectorySize(droppedFolder.FullName)).Returns(Constants.IgnoreFileSize - 1.Megabytes()); @@ -322,7 +322,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var fakeEpisodeFiles = Builder.CreateListOfSize(2) .Build().ToList(); - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(fakeSeries); Mocker.GetMock().Setup(s => s.FolderExists(fakeSeries.Path)).Returns(true); Mocker.GetMock().Setup(s => s.Scan(fakeSeries, droppedFolder.FullName)).Returns(fakeEpisodeFiles); @@ -345,8 +345,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .With(s => s.Path = @"C:\Test\TV\30 Rock") .Build(); - Mocker.GetMock() - .Setup(c => c.FindSeries("rock")) + Mocker.GetMock() + .Setup(c => c.GetByTitle("rock")) .Returns(series); Mocker.GetMock() @@ -380,8 +380,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests WithImportedFiles(downloadName.FullName); - Mocker.GetMock() - .Setup(c => c.FindSeries("rock")) + Mocker.GetMock() + .Setup(c => c.GetByTitle("rock")) .Returns(fakeSeries); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDropDirectoryFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDropDirectoryFixture.cs index 7d9f90175..1cf32ce8a 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDropDirectoryFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDropDirectoryFixture.cs @@ -57,12 +57,12 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .Setup(c => c.GetDirectories(It.IsAny())) .Returns(subFolders); - Mocker.GetMock() + Mocker.GetMock() .Setup(c => c.SeriesPathExists(subFolders[1])) .Returns(true); - Mocker.GetMock() - .Setup(c => c.FindSeries(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.GetByTitle(It.IsAny())) .Returns(fakeSeries); Mocker.GetMock() @@ -104,8 +104,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .Setup(c => c.GetVideoFiles(It.IsAny(), false)) .Returns(files); - Mocker.GetMock() - .Setup(c => c.FindSeries(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.GetByTitle(It.IsAny())) .Returns(fakeSeries); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessVideoFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessVideoFileFixture.cs index b16199ff7..a7ccf8eb8 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessVideoFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessVideoFileFixture.cs @@ -47,8 +47,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests private void WithValidSeries() { - Mocker.GetMock() - .Setup(c => c.FindSeries(It.IsAny())) + Mocker.GetMock() + .Setup(c => c.GetByTitle(It.IsAny())) .Returns(fakeSeries); Mocker.GetMock() @@ -96,11 +96,11 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var file = Path.Combine(TempFolder, "test.avi"); //Act - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(null).Verifiable(); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(null).Verifiable(); Mocker.Resolve().ProcessVideoFile(file); //Assert - Mocker.GetMock().Verify(s => s.FindSeries(It.IsAny()), Times.Once()); + Mocker.GetMock().Verify(s => s.GetByTitle(It.IsAny()), Times.Once()); ExceptionVerification.IgnoreWarns(); } @@ -112,7 +112,7 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var file = Path.Combine(TempFolder, "test.avi"); //Act - Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(null); + Mocker.GetMock().Setup(s => s.GetByTitle(It.IsAny())).Returns(null); Mocker.Resolve().ProcessVideoFile(file); //Assert @@ -149,8 +149,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .With(s => s.Path = @"C:\Test\TV\30 Rock") .Build(); - Mocker.GetMock() - .Setup(c => c.FindSeries("rock")) + Mocker.GetMock() + .Setup(c => c.GetByTitle("rock")) .Returns(series); Mocker.GetMock() @@ -182,8 +182,8 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests var downloadName = @"C:\Test\Drop\30.Rock.S01E01.Pilot.mkv"; - Mocker.GetMock() - .Setup(c => c.FindSeries("rock")) + Mocker.GetMock() + .Setup(c => c.GetByTitle("rock")) .Returns(fakeSeries); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/ReferenceDataProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/ReferenceDataProviderTest.cs index c69362b13..644addfac 100644 --- a/NzbDrone.Core.Test/ProviderTests/ReferenceDataProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/ReferenceDataProviderTest.cs @@ -111,7 +111,7 @@ namespace NzbDrone.Core.Test.ProviderTests var fakeSeries = Builder.CreateListOfSize(5) .All() - .With(s => s.IsDaily = false) + .With(s => s.SeriesType = SeriesType.Standard) .Build(); Db.InsertMany(fakeSeries); @@ -126,7 +126,7 @@ namespace NzbDrone.Core.Test.ProviderTests //Assert var result = Db.Fetch(); - result.Where(s => s.IsDaily).Should().HaveCount(5); + result.Where(s => s.SeriesType == SeriesType.Daily).Should().HaveCount(5); } [Test] @@ -136,7 +136,7 @@ namespace NzbDrone.Core.Test.ProviderTests var fakeSeries = Builder.CreateListOfSize(5) .All() - .With(s => s.IsDaily = false) + .With(s => s.SeriesType = SeriesType.Standard) .TheFirst(1) .With(s => s.SeriesId = 10) .TheNext(1) @@ -157,8 +157,8 @@ namespace NzbDrone.Core.Test.ProviderTests //Assert var result = Db.Fetch(); - result.Where(s => !s.IsDaily).Should().HaveCount(3); - result.Where(s => s.IsDaily).Should().HaveCount(2); + result.Where(s => s.SeriesType == SeriesType.Standard).Should().HaveCount(3); + result.Where(s => s.SeriesType == SeriesType.Daily).Should().HaveCount(2); } [Test] @@ -168,10 +168,10 @@ namespace NzbDrone.Core.Test.ProviderTests var fakeSeries = Builder.CreateListOfSize(5) .All() - .With(s => s.IsDaily = false) + .With(s => s.SeriesType = SeriesType.Standard) .TheFirst(1) .With(s => s.SeriesId = 10) - .With(s => s.IsDaily = true) + .With(s => s.SeriesType = SeriesType.Daily) .TheNext(1) .With(s => s.SeriesId = 11) .TheNext(1) @@ -190,8 +190,8 @@ namespace NzbDrone.Core.Test.ProviderTests //Assert var result = Db.Fetch(); - result.Where(s => s.IsDaily).Should().HaveCount(3); - result.Where(s => !s.IsDaily).Should().HaveCount(2); + result.Where(s => s.SeriesType == SeriesType.Daily).Should().HaveCount(3); + result.Where(s => s.SeriesType == SeriesType.Standard).Should().HaveCount(2); } [Test] diff --git a/NzbDrone.Core.Test/ProviderTests/SearchHistoryProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/SearchHistoryProviderTest.cs index 33b4d5014..85e7cff13 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchHistoryProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchHistoryProviderTest.cs @@ -43,7 +43,7 @@ namespace NzbDrone.Core.Test.ProviderTests .Build().ToList(); _searchHistory = Builder.CreateNew() - .With(h => h.EpisodeId = _episode.EpisodeId) + .With(h => h.EpisodeId = _episode.OID) .With(h => h.SeriesId - _series.SeriesId) .With(h => h.SearchHistoryItems = items) .Build(); diff --git a/NzbDrone.Core.Test/ProviderTests/SearchTests/ProcessResultsFixture.cs b/NzbDrone.Core.Test/ProviderTests/SearchTests/ProcessResultsFixture.cs index 3605c4851..332c4c8d7 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchTests/ProcessResultsFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchTests/ProcessResultsFixture.cs @@ -51,27 +51,27 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchTests .CreateListOfSize(1) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisodesByParseResult(It.IsAny())) .Returns(_episodes); } private void WithMatchingSeries() { - Mocker.GetMock() - .Setup(s => s.FindSeries(It.IsAny())).Returns(_matchingSeries); + Mocker.GetMock() + .Setup(s => s.GetByTitle(It.IsAny())).Returns(_matchingSeries); } private void WithMisMatchedSeries() { - Mocker.GetMock() - .Setup(s => s.FindSeries(It.IsAny())).Returns(_mismatchedSeries); + Mocker.GetMock() + .Setup(s => s.GetByTitle(It.IsAny())).Returns(_mismatchedSeries); } private void WithNullSeries() { - Mocker.GetMock() - .Setup(s => s.FindSeries(It.IsAny())).Returns(_nullSeries); + Mocker.GetMock() + .Setup(s => s.GetByTitle(It.IsAny())).Returns(_nullSeries); } private void WithSuccessfulDownload() diff --git a/NzbDrone.Core.Test/ProviderTests/SearchTests/TestSearch.cs b/NzbDrone.Core.Test/ProviderTests/SearchTests/TestSearch.cs index f71725197..2ed66672a 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchTests/TestSearch.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchTests/TestSearch.cs @@ -17,10 +17,10 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchTests { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public TestSearch(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, DownloadProvider downloadProvider, + public TestSearch(ISeriesService seriesService, EpisodeService episodeService, DownloadProvider downloadProvider, IndexerProvider indexerProvider, SceneMappingProvider sceneMappingProvider, - AllowedDownloadSpecification allowedDownloadSpecification, SearchHistoryProvider searchHistoryProvider) - : base(seriesProvider, episodeProvider, downloadProvider, indexerProvider, sceneMappingProvider, + AllowedDownloadSpecification allowedDownloadSpecification, SearchHistoryProvider searchHistoryProvider,ISeriesRepository seriesRepository) + : base(seriesService, seriesRepository, episodeService, downloadProvider, indexerProvider, sceneMappingProvider, allowedDownloadSpecification, searchHistoryProvider) { } diff --git a/NzbDrone.Core.Test/ProviderTests/TvRageMappingProviderTests/FindMatchingTvRageSeriesFixture.cs b/NzbDrone.Core.Test/ProviderTests/TvRageMappingProviderTests/FindMatchingTvRageSeriesFixture.cs index 5ef6e7dfd..e67ea7607 100644 --- a/NzbDrone.Core.Test/ProviderTests/TvRageMappingProviderTests/FindMatchingTvRageSeriesFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/TvRageMappingProviderTests/FindMatchingTvRageSeriesFixture.cs @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.ProviderTests.TvRageMappingProviderTests .With(s => s.UtcOffset = -8) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.GetEpisode(_series.SeriesId, 1, 1)) .Returns(_episode); diff --git a/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs b/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs index 157f8f0bb..b994b7e23 100644 --- a/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs +++ b/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.RootFolderTests Subject.Add(root); - Mocker.GetMock>().Verify(c => c.Add(root), Times.Once()); + Mocker.GetMock>().Verify(c => c.Insert(root), Times.Once()); } [Test] diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs index 42f18d3c7..42b7a2b14 100644 --- a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs +++ b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs @@ -29,13 +29,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeEpisodes = Builder.CreateListOfSize(5) - .All().With(e => e.SeriesId = 1).With(e => e.EpisodeFileId = 0).Build(); + .All().With(e => e.SeriesId = 1).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); //Act - var episode = Mocker.Resolve().GetEpisode(1); + var episode = Mocker.Resolve().GetEpisode(1); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series, e => e.EpisodeFile).EqualTo(fakeEpisodes.First()); @@ -53,14 +53,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeEpisodes = Builder.CreateNew() .With(e => e.SeriesId = 1) .With(e => e.EpisodeNumber = 1) - .And(e => e.SeasonNumber = 2) - .With(e => e.EpisodeFileId = 0).Build(); + .And(e => e.SeasonNumber = 2).Build(); Db.Insert(fakeSeries); Db.Insert(fakeEpisodes); //Act - var episode = Mocker.Resolve().GetEpisode(fakeSeries.SeriesId, 2, 1); + var episode = Mocker.Resolve().GetEpisode(fakeSeries.SeriesId, 2, 1); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series).EqualTo(fakeEpisodes); @@ -73,7 +72,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests WithRealDb(); //Act - var episode = Mocker.Resolve().GetEpisode(1, 1, 1); + var episode = Mocker.Resolve().GetEpisode(1, 1, 1); //Assert episode.Should().BeNull(); @@ -87,14 +86,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeFile = Builder.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build(); var fakeEpisodes = Builder.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.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); Db.Insert(fakeFile); //Act - var episode = Mocker.Resolve().GetEpisode(1); + var episode = Mocker.Resolve().GetEpisode(1); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series, e => e.EpisodeFile).EqualTo(fakeEpisodes.First()); @@ -108,7 +107,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests { WithRealDb(); - Mocker.Resolve(); + Mocker.Resolve(); var fakeEpisodes = Builder.CreateListOfSize(5) .All().With(e => e.SeriesId = 1).Build(); @@ -118,9 +117,9 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().GetEpisode(1); + Mocker.Resolve().GetEpisode(1); } - + [Test] public void GetEpisodesBySeason_success() { @@ -139,7 +138,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(episodes); //Act - var seasonEposodes = Mocker.Resolve().GetEpisodesBySeason(12, 2); + var seasonEposodes = Mocker.Resolve().GetEpisodesBySeason(12, 2); //Assert Db.Fetch().Should().HaveCount(10); @@ -172,10 +171,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(fakeEpisodes); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var actualCount = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList().Count; + var actualCount = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList().Count; Mocker.GetMock().VerifyAll(); actualCount.Should().Be(episodeCount); } @@ -207,10 +206,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var storedEpisodes = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var storedEpisodes = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); storedEpisodes.Should().HaveCount(10); storedEpisodes.Where(e => e.AirDate == null).Should().HaveCount(7); storedEpisodes.Where(e => e.AirDate != null).Should().HaveCount(3); @@ -247,10 +246,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(fakeTvDbEpisodes); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var storedEpisodes = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var storedEpisodes = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); storedEpisodes.Should().HaveCount(1); storedEpisodes.Where(e => e.AirDate == null).Should().HaveCount(1); } @@ -285,10 +284,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); Mocker.GetMock().VerifyAll(); result.Should().HaveCount(episodeCount); result.Where(e => e.EpisodeNumber == 0 && e.SeasonNumber == 15).Single().Ignored.Should().BeTrue(); @@ -324,10 +323,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); result.Should().HaveCount(episodeCount - 3); result.Should().OnlyContain(c => !string.IsNullOrWhiteSpace(c.Title) || c.AirDate < DateTime.Now); } @@ -346,7 +345,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(e => e.EpisodeName = "Something") .TheFirst(3) .With(e => e.EpisodeName = "") - .With(e => e.FirstAired = new DateTime(1889,1,1)) + .With(e => e.FirstAired = new DateTime(1889, 1, 1)) .Build()) ).With(c => c.Id = seriesId).Build(); @@ -362,10 +361,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); result.Should().HaveCount(episodeCount - 3); result.Should().OnlyContain(c => !string.IsNullOrWhiteSpace(c.Title) || c.AirDate < DateTime.Now); } @@ -395,10 +394,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); result.Should().HaveSameCount(fakeEpisodes.Episodes); } @@ -428,10 +427,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); result.Should().HaveSameCount(fakeEpisodes.Episodes); } @@ -461,15 +460,15 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Setup(c => c.GetSeries(seriesId, true, false)) .Returns(fakeEpisodes); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.IsIgnored(seriesId, 0)) .Returns(true); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); Mocker.GetMock().VerifyAll(); result.Should().HaveCount(episodeCount); result.Where(e => e.Ignored).Should().HaveCount(episodeCount); @@ -497,7 +496,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert Mocker.GetMock().Verify(c => c.InsertMany(It.Is>(l => l.Count() == 5)), Times.Once()); @@ -531,7 +530,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(currentEpisodes); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert Mocker.GetMock().Verify(c => c.InsertMany(It.Is>(l => l.Count() == 0)), Times.Once()); @@ -564,7 +563,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(fakeTvDbResult); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert Mocker.VerifyAllMocks(); @@ -605,7 +604,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(new List { localEpisode }); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert Mocker.VerifyAllMocks(); @@ -627,13 +626,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests { currentEpisodes.Add(new Episode { - TvDbEpisodeId = tvDbEpisode.Id, - EpisodeId = 99, - EpisodeFileId = 69, - Ignored = true, - Series = fakeSeries, - EpisodeNumber = tvDbEpisode.EpisodeNumber, - SeasonNumber = tvDbEpisode.SeasonNumber + TvDbEpisodeId = tvDbEpisode.Id, + OID = 99, + EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, + Ignored = true, + Series = fakeSeries, + EpisodeNumber = tvDbEpisode.EpisodeNumber, + SeasonNumber = tvDbEpisode.SeasonNumber }); } @@ -652,11 +651,11 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Callback>(ep => updatedEpisodes = ep.ToList()); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert updatedEpisodes.Should().HaveSameCount(tvdbSeries.Episodes); - updatedEpisodes.Should().OnlyContain(c => c.EpisodeId == 99); + updatedEpisodes.Should().OnlyContain(c => c.OID == 99); updatedEpisodes.Should().OnlyContain(c => c.EpisodeFileId == 69); updatedEpisodes.Should().OnlyContain(c => c.Ignored == true); } @@ -677,8 +676,8 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests currentEpisodes.Add(new Episode { TvDbEpisodeId = tvDbEpisode.Id, - EpisodeId = 99, - EpisodeFileId = 69, + OID = 99, + EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, Ignored = true, Series = fakeSeries, EpisodeNumber = tvDbEpisode.EpisodeNumber + 1, @@ -701,7 +700,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Callback>(ep => updatedEpisodes = ep.ToList()); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert updatedEpisodes.Should().OnlyContain(c => c.EpisodeFileId == 0); @@ -723,8 +722,8 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests currentEpisodes.Add(new Episode { TvDbEpisodeId = tvDbEpisode.Id, - EpisodeId = 99, - EpisodeFileId = 69, + OID = 99, + EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, Ignored = true, Series = fakeSeries, EpisodeNumber = tvDbEpisode.EpisodeNumber, @@ -747,7 +746,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Callback>(ep => updatedEpisodes = ep.ToList()); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert updatedEpisodes.Should().OnlyContain(c => c.EpisodeFileId == 0); @@ -794,15 +793,15 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Setup(c => c.GetSeries(seriesId, true, false)) .Returns(tvdbSeries); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.IsIgnored(seriesId, It.IsAny())) .Returns(true); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); Mocker.GetMock().VerifyAll(); result.Should().HaveCount(episodeCount); result.Where(e => e.Ignored).Should().HaveCount(episodeCount); @@ -820,15 +819,18 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(Builder.CreateNew().Build()); + var seriesRepo = Mocker.Resolve(); const int tvDbSeriesId = 71256; //act - var seriesProvider = Mocker.Resolve(); + var seriesProvider = Mocker.Resolve(); + + seriesProvider.AddSeries("Test Series", "c:\\test\\", tvDbSeriesId, 1, null); + - seriesProvider.AddSeries("Test Series","c:\\test\\", tvDbSeriesId, 1, null); - var episodeProvider = Mocker.Resolve(); - episodeProvider.RefreshEpisodeInfo(seriesProvider.GetSeries(tvDbSeriesId)); + var episodeProvider = Mocker.Resolve(); + episodeProvider.RefreshEpisodeInfo(seriesRepo.Get(tvDbSeriesId)); //assert var episodes = episodeProvider.GetEpisodeBySeries(tvDbSeriesId); @@ -841,7 +843,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests WithRealDb(); //Act - var episode = Mocker.Resolve().GetEpisode(1, 1, 1); + var episode = Mocker.Resolve().GetEpisode(1, 1, 1); //Assert episode.Should().BeNull(); @@ -855,14 +857,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeFile = Builder.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build(); var fakeEpisodes = Builder.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(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); Db.Insert(fakeFile); //Act - var episode = Mocker.Resolve().GetEpisode(1, 1, 1); + var episode = Mocker.Resolve().GetEpisode(1, 1, 1); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series, e => e.EpisodeFile).EqualTo(fakeEpisodes.First()); @@ -877,13 +879,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeEpisodes = Builder.CreateListOfSize(5) - .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 0).Build(); + .All().With(e => e.SeriesId = 1).TheFirst(1).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); //Act - var episode = Mocker.Resolve().GetEpisode(1, 1, 1); + var episode = Mocker.Resolve().GetEpisode(1, 1, 1); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series).EqualTo(fakeEpisodes.First()); @@ -899,14 +901,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeFile = Builder.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.SDTV).Build(); var fakeEpisodes = Builder.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.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); Db.Insert(fakeFile); //Act - var episode = Mocker.Resolve().GetEpisode(1, fakeEpisodes[0].AirDate.Value); + var episode = Mocker.Resolve().GetEpisode(1, fakeEpisodes[0].AirDate.Value); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series, e => e.EpisodeFile).EqualTo(fakeEpisodes.First()); @@ -921,13 +923,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeEpisodes = Builder.CreateListOfSize(5) - .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFileId = 0).Build(); + .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).Build(); Db.InsertMany(fakeEpisodes); Db.Insert(fakeSeries); //Act - var episode = Mocker.Resolve().GetEpisode(1, fakeEpisodes[0].AirDate.Value); + var episode = Mocker.Resolve().GetEpisode(1, fakeEpisodes[0].AirDate.Value); //Assert episode.ShouldHave().AllPropertiesBut(e => e.Series).EqualTo(fakeEpisodes.First()); @@ -947,11 +949,11 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(fakeEpisodes); //Act - Mocker.Resolve().MarkEpisodeAsFetched(2); + Mocker.Resolve().MarkEpisodeAsFetched(2); var episodes = Db.Fetch(); //Assert - episodes.Where(e => e.EpisodeId == 2).Single().GrabDate.Should().BeWithin(TimeSpan.FromSeconds(5)).Before( + episodes.Where(e => e.OID == 2).Single().GrabDate.Should().BeWithin(TimeSpan.FromSeconds(5)).Before( DateTime.Now); episodes.Where(e => e.GrabDate == null).Should().HaveCount(4); @@ -979,12 +981,12 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(e => e.Ignored = false) .Build(); - Mocker.GetMock() + Mocker.GetMock() .Setup(s => s.IsIgnored(newEpisode.SeriesId, newEpisode.SeasonNumber)) .Returns(true); //Act - Mocker.Resolve().AddEpisode(newEpisode); + Mocker.Resolve().AddEpisode(newEpisode); //Assert var episodesInDb = Db.Fetch(@"SELECT * FROM Episodes"); @@ -1018,7 +1020,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Build(); //Act - Mocker.Resolve().AddEpisode(newEpisode); + Mocker.Resolve().AddEpisode(newEpisode); //Assert var episodesInDb = Db.Fetch(@"SELECT * FROM Episodes"); @@ -1054,7 +1056,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Build(); //Act - Mocker.Resolve().AddEpisode(newEpisode); + Mocker.Resolve().AddEpisode(newEpisode); //Assert var episodesInDb = Db.Fetch(@"SELECT * FROM Episodes"); @@ -1080,7 +1082,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests episodes.ForEach(c => Db.Insert(c)); //Act - Mocker.Resolve().SetEpisodeIgnore(1, true); + Mocker.Resolve().SetEpisodeIgnore(1, true); //Assert var episodesInDb = Db.Fetch(@"SELECT * FROM Episodes"); @@ -1106,7 +1108,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests episodes.ForEach(c => Db.Insert(c)); //Act - Mocker.Resolve().SetEpisodeIgnore(1, false); + Mocker.Resolve().SetEpisodeIgnore(1, false); //Assert var episodesInDb = Db.Fetch(@"SELECT * FROM Episodes"); @@ -1133,7 +1135,6 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.AirDate = DateTime.Today.AddDays(-4)) .With(c => c.Ignored = true) .TheFirst(2) - .With(c => c.EpisodeFileId = 0) .Section(1, 2) .With(c => c.Ignored = false) .Build().ToList(); @@ -1143,7 +1144,6 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.SeriesId = 10) .With(c => c.SeasonNumber = 0) .With(c => c.AirDate = DateTime.Today.AddDays(-4)) - .With(c => c.EpisodeFileId = 0) .With(c => c.Ignored = false) .TheFirst(1).With(c => c.Ignored = true) .Build().ToList(); @@ -1153,7 +1153,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(specials); //Act - var missingFiles = Mocker.Resolve().EpisodesWithoutFiles(false); + var missingFiles = Mocker.Resolve().EpisodesWithoutFiles(false); //Assert missingFiles.Should().HaveCount(1); @@ -1178,7 +1178,6 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.AirDate = DateTime.Today.AddDays(-4)) .With(c => c.Ignored = true) .TheFirst(2) - .With(c => c.EpisodeFileId = 0) .Section(1, 2) .With(c => c.Ignored = false) .Build().ToList(); @@ -1188,7 +1187,6 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.SeriesId = 10) .With(c => c.SeasonNumber = 0) .With(c => c.AirDate = DateTime.Today.AddDays(-4)) - .With(c => c.EpisodeFileId = 0) .With(c => c.Ignored = false) .TheFirst(1) .With(c => c.Ignored = true) @@ -1199,7 +1197,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(specials); //Act - var missingFiles = Mocker.Resolve().EpisodesWithoutFiles(true); + var missingFiles = Mocker.Resolve().EpisodesWithoutFiles(true); //Assert missingFiles.Should().HaveCount(2); @@ -1229,7 +1227,6 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.AirDate = DateTime.Today.AddDays(-4)) .With(c => c.Ignored = true) .With(c => c.EpisodeFile = episodeFile) - .With(c => c.EpisodeFileId = episodeFile.EpisodeFileId) .Build().ToList(); Db.Insert(series); @@ -1237,7 +1234,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(episodes); //Act - var withFiles = Mocker.Resolve().EpisodesWithFiles(); + var withFiles = Mocker.Resolve().EpisodesWithFiles(); //Assert withFiles.Should().HaveCount(2); @@ -1268,14 +1265,13 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .With(c => c.SeasonNumber = 1) .With(c => c.AirDate = DateTime.Today.AddDays(-4)) .With(c => c.Ignored = true) - .With(c => c.EpisodeFileId = 0) .Build().ToList(); Db.Insert(series); Db.InsertMany(episodes); //Act - var withFiles = Mocker.Resolve().EpisodesWithFiles(); + var withFiles = Mocker.Resolve().EpisodesWithFiles(); //Assert withFiles.Should().HaveCount(0); @@ -1296,14 +1292,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .All() .With(c => c.SeriesId = 10) .With(c => c.SeasonNumber = 1) - .With(c => c.EpisodeFileId = 12345) + .With(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 12345 }) .Build(); Db.Insert(series); Db.InsertMany(fakeEpisodes); //Act - var episodes = Mocker.Resolve().GetEpisodesByFileId(12345); + var episodes = Mocker.Resolve().GetEpisodesByFileId(12345); //Assert episodes.Should().HaveCount(2); @@ -1322,14 +1318,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeEpisode = Builder.CreateNew() .With(c => c.SeriesId = 10) .With(c => c.SeasonNumber = 1) - .With(c => c.EpisodeFileId = 12345) + .With(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 12345 }) .Build(); Db.Insert(series); Db.Insert(fakeEpisode); //Act - var episodes = Mocker.Resolve().GetEpisodesByFileId(12345); + var episodes = Mocker.Resolve().GetEpisodesByFileId(12345); //Assert episodes.Should().HaveCount(1); @@ -1351,7 +1347,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(fakeEpisodes); //Act - var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 5); + var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 5); //Assert result.Should().BeFalse(); @@ -1371,7 +1367,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(fakeEpisodes); //Act - var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 1); + var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 1); //Assert result.Should().BeFalse(); @@ -1391,7 +1387,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.InsertMany(fakeEpisodes); //Act - var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 10); + var result = Mocker.Resolve().IsFirstOrLastEpisodeOfSeason(10, 1, 10); //Assert result.Should().BeFalse(); @@ -1422,10 +1418,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); - Mocker.GetMock().Setup(s => s.FindSeries("officeus")).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle("officeus")).Returns(fakeSeries); //Act - Mocker.Resolve().SetPostDownloadStatus(fakeEpisodes.Select(e => e.EpisodeId).ToList(), postDownloadStatus); + Mocker.Resolve().SetPostDownloadStatus(fakeEpisodes.Select(e => e.OID).ToList(), postDownloadStatus); //Assert var result = Db.Fetch(); @@ -1454,10 +1450,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); - Mocker.GetMock().Setup(s => s.FindSeries("officeus")).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.GetByTitle("officeus")).Returns(fakeSeries); //Act - Mocker.Resolve().SetPostDownloadStatus(new List { 300 }, postDownloadStatus); + Mocker.Resolve().SetPostDownloadStatus(new List { 300 }, postDownloadStatus); //Assert var result = Db.Fetch(); @@ -1468,7 +1464,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests [ExpectedException(typeof(ArgumentException))] public void SetPostDownloadStatus_should_throw_if_episode_list_is_empty() { - Mocker.Resolve().SetPostDownloadStatus(new List(), PostDownloadStatusType.Failed); + Mocker.Resolve().SetPostDownloadStatus(new List(), PostDownloadStatusType.Failed); } [Test] @@ -1508,10 +1504,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests .Returns(tvdbSeries); //Act - Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); + Mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); + var result = Mocker.Resolve().GetEpisodeBySeries(seriesId).ToList(); result.Should().HaveCount(episodeCount); result.Where(e => e.Ignored).Should().HaveCount(episodeCount - 1); result.Single(e => e.SeasonNumber == 1).Ignored.Should().BeFalse(); @@ -1525,14 +1521,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); var fakeFile = Builder.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = QualityTypes.WEBDL1080p).Build(); var fakeEpisodes = Builder.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.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); Db.Insert(fakeSeries); Db.InsertMany(fakeEpisodes); Db.Insert(fakeFile); //Act - var episode = Mocker.Resolve().GetEpisode(1); + var episode = Mocker.Resolve().GetEpisode(1); //Assert episode.EpisodeFile.Quality.Should().Be(QualityTypes.WEBDL1080p); diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs index ff85387f6..5a522d8bf 100644 --- a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs +++ b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeEpisode); //Act - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); //Assert var result = Db.Fetch(); @@ -81,7 +81,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeEpisode); //Act - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); //Assert var result = Db.Fetch(); @@ -115,7 +115,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeEpisode); //Act - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); //Assert var result = Db.Fetch(); @@ -153,7 +153,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeEpisode); //Act - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); //Assert var result = Db.Fetch(); @@ -206,7 +206,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(otherFakeEpisode); //Act - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries); //Assert var result = Db.Fetch(); @@ -220,7 +220,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests var fakeSeries = Builder.CreateNew().Build(); - Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, new List()); + Mocker.Resolve().DeleteEpisodesNotInTvdb(fakeSeries, new List()); } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs index 1ea65784e..ac115f094 100644 --- a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs +++ b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests // ReSharper disable InconsistentNaming public class EpisodeProviderTest_GetEpisodesByParseResult : SqlCeTest { - private EpisodeProvider episodeProvider; + private EpisodeService episodeService; private Series fakeSeries; private Series fakeDailySeries; @@ -32,7 +32,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests fakeSeries = Builder.CreateNew().Build(); fakeDailySeries = Builder.CreateNew() - .With(c => c.IsDaily = true) + .With(c => c.SeriesType = SeriesType.Daily) .Build(); fakeEpisode = Builder.CreateNew() @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests WithRealDb(); - episodeProvider = Mocker.Resolve(); + episodeService = Mocker.Resolve(); } [Test] @@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { fakeEpisode.EpisodeNumber } }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().HaveCount(1); parseResult.EpisodeTitle.Should().Be(fakeEpisode.Title); @@ -89,7 +89,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { 10 } }; - var episode = episodeProvider.GetEpisodesByParseResult(parseResult); + var episode = episodeService.GetEpisodesByParseResult(parseResult); episode.Should().BeEmpty(); Db.Fetch().Should().HaveCount(0); @@ -105,7 +105,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { 10 } }; - var episode = episodeProvider.GetEpisodesByParseResult(parseResult); + var episode = episodeService.GetEpisodesByParseResult(parseResult); episode.Should().BeEmpty(); Db.Fetch().Should().HaveCount(0); @@ -126,7 +126,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { fakeEpisode.EpisodeNumber, fakeEpisode2.EpisodeNumber } }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().HaveCount(2); Db.Fetch().Should().HaveCount(2); @@ -149,7 +149,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { fakeEpisode.EpisodeNumber, fakeEpisode2.EpisodeNumber } }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().BeEmpty(); Db.Fetch().Should().BeEmpty(); @@ -160,7 +160,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests public void GetEpisodeParseResult_should_return_empty_list_if_episode_list_is_null() { //Act - var episodes = episodeProvider.GetEpisodesByParseResult(new EpisodeParseResult()); + var episodes = episodeService.GetEpisodesByParseResult(new EpisodeParseResult()); //Assert episodes.Should().NotBeNull(); episodes.Should().BeEmpty(); @@ -170,7 +170,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests public void GetEpisodeParseResult_should_return_empty_list_if_episode_list_is_empty() { //Act - var episodes = episodeProvider.GetEpisodesByParseResult(new EpisodeParseResult { EpisodeNumbers = new List() }); + var episodes = episodeService.GetEpisodesByParseResult(new EpisodeParseResult { EpisodeNumbers = new List() }); //Assert episodes.Should().NotBeNull(); episodes.Should().BeEmpty(); @@ -184,7 +184,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests Db.Insert(fakeDailyEpisode); //Act - var episodes = episodeProvider.GetEpisodesByParseResult(new EpisodeParseResult { AirDate = DateTime.Today, Series = fakeDailySeries }); + var episodes = episodeService.GetEpisodesByParseResult(new EpisodeParseResult { AirDate = DateTime.Today, Series = fakeDailySeries }); //Assert episodes.Should().HaveCount(1); @@ -196,7 +196,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests [Test] public void should_not_add_episode_when_episode_doesnt_exist() { - var episodes = episodeProvider.GetEpisodesByParseResult(new EpisodeParseResult { AirDate = DateTime.Today, Series = fakeDailySeries }); + var episodes = episodeService.GetEpisodesByParseResult(new EpisodeParseResult { AirDate = DateTime.Today, Series = fakeDailySeries }); //Assert episodes.Should().HaveCount(0); @@ -218,7 +218,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { fakeEpisode.EpisodeNumber, fakeEpisode2.EpisodeNumber } }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().HaveCount(2); Db.Fetch().Should().HaveCount(2); @@ -242,7 +242,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests EpisodeNumbers = new List { fakeEpisode.EpisodeNumber } }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().HaveCount(1); Db.Fetch().Should().HaveCount(1); @@ -261,7 +261,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests AirDate = DateTime.Today }; - var ep = episodeProvider.GetEpisodesByParseResult(parseResult); + var ep = episodeService.GetEpisodesByParseResult(parseResult); ep.Should().BeEmpty(); ExceptionVerification.ExpectedWarns(1); diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/GetEpisodeBySceneNumberFixture.cs b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/GetEpisodeBySceneNumberFixture.cs index aa7cf63b6..e3d6741a7 100644 --- a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/GetEpisodeBySceneNumberFixture.cs +++ b/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/GetEpisodeBySceneNumberFixture.cs @@ -52,14 +52,14 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests [Test] public void should_return_null_if_no_episodes_in_db() { - Mocker.Resolve().GetEpisodeBySceneNumbering(_series.SeriesId, 1, 1).Should().BeNull(); + Mocker.Resolve().GetEpisodeBySceneNumbering(_series.SeriesId, 1, 1).Should().BeNull(); } [Test] public void should_return_null_if_no_matching_episode_is_found() { WithNullSceneNumbering(); - Mocker.Resolve().GetEpisodeBySceneNumbering(_series.SeriesId, 1, 1).Should().BeNull(); + Mocker.Resolve().GetEpisodeBySceneNumbering(_series.SeriesId, 1, 1).Should().BeNull(); } [Test] @@ -67,10 +67,10 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests { WithSceneNumbering(); - var result = Mocker.Resolve() + var result = Mocker.Resolve() .GetEpisodeBySceneNumbering(_series.SeriesId, _episode.SceneSeasonNumber, _episode.SceneEpisodeNumber); - result.EpisodeId.Should().Be(_episode.EpisodeId); + result.OID.Should().Be(_episode.OID); } } } diff --git a/NzbDrone.Core.Test/TvTests/SeasonProviderTest.cs b/NzbDrone.Core.Test/TvTests/SeasonProviderTest.cs index 14d6b0156..c46661c0f 100644 --- a/NzbDrone.Core.Test/TvTests/SeasonProviderTest.cs +++ b/NzbDrone.Core.Test/TvTests/SeasonProviderTest.cs @@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.TvTests var fakeEpisodes = Builder.CreateListOfSize(4) .All() .With(c => c.SeriesId = fakeSeason.SeriesId) - .With(c => c.SeasonNumber = fakeSeason.SeasonId) + .With(c => c.SeasonNumber = fakeSeason.OID) .With(c => c.Ignored = !ignoreFlag) .Build().ToList(); @@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.TvTests var id = Db.Insert(fakeSeason); //Act - Mocker.Resolve().SetIgnore(fakeSeason.SeriesId, fakeSeason.SeasonNumber, ignoreFlag); + Mocker.Resolve().SetIgnore(fakeSeason.SeriesId, fakeSeason.SeasonNumber, ignoreFlag); //Assert var season = Db.SingleOrDefault(id); @@ -65,7 +65,7 @@ namespace NzbDrone.Core.Test.TvTests Db.Insert(fakeSeason); //Act - var result = Mocker.Resolve().IsIgnored(fakeSeason.SeriesId, fakeSeason.SeasonNumber); + var result = Mocker.Resolve().IsIgnored(fakeSeason.SeriesId, fakeSeason.SeasonNumber); //Assert result.Should().Be(ignoreFlag); @@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.TvTests [Test] public void IsIgnored_should_throw_an_exception_if_not_in_db() { - Assert.Throws(() => Mocker.Resolve().IsIgnored(10, 0)); + Assert.Throws(() => Mocker.Resolve().IsIgnored(10, 0)); } [Test] @@ -98,7 +98,7 @@ namespace NzbDrone.Core.Test.TvTests Db.InsertMany(episodes); //Act - var result = Mocker.Resolve().All(seriesId); + var result = Mocker.Resolve().GetSeasonBySeries(seriesId); //Assert result.Should().HaveCount(1); @@ -135,7 +135,7 @@ namespace NzbDrone.Core.Test.TvTests Db.InsertMany(episodes); //Act - var result = Mocker.Resolve().All(seriesId); + var result = Mocker.Resolve().GetSeasonBySeries(seriesId); //Assert result.Should().HaveCount(5); @@ -147,46 +147,7 @@ namespace NzbDrone.Core.Test.TvTests } } - [Test] - public void EnsureSeason_should_add_all_seasons_for_new_series() - { - var seasons = new[] { 0, 1, 2, 3, 4, 5 }; - Mocker.Resolve().EnsureSeasons(12, seasons); - - Mocker.Resolve().GetSeasons(12).SequenceEqual(seasons); - } - - [Test] - public void EnsureSeason_should_add_missing_seasons() - { - var seasonsA = new[] { 0, 1, 2, 3 }; - var seasonsB = new[] { 0, 1, 2, 3, 4, 5 }; - Mocker.Resolve().EnsureSeasons(12, seasonsA); - Mocker.Resolve().GetSeasons(12).SequenceEqual(seasonsA); - - Mocker.Resolve().EnsureSeasons(12, seasonsB); - Mocker.Resolve().GetSeasons(12).SequenceEqual(seasonsB); - } - - - [Test] - public void EnsureSeason_marks_season_zero_as_ignored() - { - var seasons = new[] { 0, 1, 2, 3 }; - - Mocker.Resolve().EnsureSeasons(12, seasons); - Db.Fetch().Should().Contain(c => c.SeasonNumber == 0 && c.Ignored); - } - - - [Test] - public void EnsureSeason_none_zero_seasons_arent_ignored() - { - var seasons = new[] { 1, 2, 3 }; - - Mocker.Resolve().EnsureSeasons(12, seasons); - Db.Fetch().Should().OnlyContain(c => c.Ignored == false); - } + [Test] public void GetSeason_should_return_seasons_for_specified_series_only() @@ -194,18 +155,15 @@ namespace NzbDrone.Core.Test.TvTests var seriesA = new[] { 1, 2, 3 }; var seriesB = new[] { 4, 5, 6 }; - Mocker.Resolve().EnsureSeasons(1, seriesA); - Mocker.Resolve().EnsureSeasons(2, seriesB); - - Mocker.Resolve().GetSeasons(1).Should().Equal(seriesA); - Mocker.Resolve().GetSeasons(2).Should().Equal(seriesB); + Mocker.Resolve().GetSeasonNumbers(1).Should().Equal(seriesA); + Mocker.Resolve().GetSeasonNumbers(2).Should().Equal(seriesB); } [Test] public void GetSeason_should_return_emptylist_if_series_doesnt_exist() { - Mocker.Resolve().GetSeasons(1).Should().BeEmpty(); + Mocker.Resolve().GetSeasonNumbers(1).Should().BeEmpty(); } } diff --git a/NzbDrone.Core.Test/TvTests/SeriesProviderTest.cs b/NzbDrone.Core.Test/TvTests/SeriesProviderTest.cs index f30ab50fc..657e399b5 100644 Binary files a/NzbDrone.Core.Test/TvTests/SeriesProviderTest.cs and b/NzbDrone.Core.Test/TvTests/SeriesProviderTest.cs differ diff --git a/NzbDrone.Core.Test/dbBenchmark.cs b/NzbDrone.Core.Test/dbBenchmark.cs deleted file mode 100644 index b852311a0..000000000 --- a/NzbDrone.Core.Test/dbBenchmark.cs +++ /dev/null @@ -1,244 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading; - -using FizzWare.NBuilder; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Core.Tv; -using NzbDrone.Core.Providers; -using NzbDrone.Core.Repository; -using NzbDrone.Core.Repository.Quality; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Test.Common.AutoMoq; -using PetaPoco; - -namespace NzbDrone.Core.Test -{ - [TestFixture] - [Explicit] - [Category("Benchmark")] - // ReSharper disable InconsistentNaming - public class DbBenchmark : SqlCeTest - { - const int Episodes_Per_Season = 20; - private readonly List seasonsNumbers = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; - private readonly List seriesIds = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; - private readonly List episodes = new List(); - private readonly List files = new List(); - private IDatabase db; - - - [TestFixtureSetUp] - public void Setup() - { - WithRealDb(); - - int currentFileId = 0; - - - var qulityProfile = new QualityProfile - { - Name = "TestProfile", - Allowed = new List { QualityTypes.DVD, QualityTypes.Bluray1080p }, - Cutoff = QualityTypes.DVD - }; - Db.Insert(qulityProfile); - - foreach (var _seriesId in seriesIds) - { - int seriesId = _seriesId; - var series = Builder.CreateNew() - .With(s => s.SeriesId = seriesId) - .With(s => s.Monitored = true) - .Build(); - - Db.Insert(series); - - foreach (var _seasonNumber in seasonsNumbers) - { - for (int i = 1; i <= Episodes_Per_Season; i++) - { - var epFileId = 0; - - if (i < 10) - { - var epFile = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .And(e => e.SeasonNumber = _seasonNumber) - .And(e => e.Path = Guid.NewGuid().ToString()) - .Build(); - - files.Add(epFile); - - currentFileId++; - epFileId = currentFileId; - - } - - - var episode = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .And(e => e.SeasonNumber = _seasonNumber) - .And(e => e.EpisodeNumber = i) - .And(e => e.Ignored = false) - .And(e => e.TvDbEpisodeId = episodes.Count + 1) - .And(e => e.EpisodeFileId = epFileId) - .And(e => e.AirDate = DateTime.Today.AddDays(-20)) - .Build(); - - episodes.Add(episode); - - - } - } - - } - - Db.InsertMany(episodes); - Db.InsertMany(files); - } - - - [Test] - public void get_episode_by_series_seasons_episode_x5000() - { - - Mocker.SetConstant(db); - Mocker.Resolve(); - - var epProvider = Mocker.Resolve(); - - Thread.Sleep(1000); - - var random = new Random(); - Console.WriteLine("Starting Test"); - - var sw = Stopwatch.StartNew(); - for (int i = 0; i < 5000; i++) - { - var ep = epProvider.GetEpisode(6, random.Next(2, 5), random.Next(2, Episodes_Per_Season - 10)); - ep.Series.Should().NotBeNull(); - } - - sw.Stop(); - - Console.WriteLine("Took " + sw.Elapsed); - } - - [Test] - public void get_episode_by_series_seasons_x1000() - { - - Mocker.SetConstant(db); - Mocker.Resolve(); - - var epProvider = Mocker.Resolve(); - - - Thread.Sleep(1000); - - - var random = new Random(); - Console.WriteLine("Starting Test"); - - var sw = Stopwatch.StartNew(); - for (int i = 0; i < 1000; i++) - { - epProvider.GetEpisodesBySeason(6, random.Next(2, 5)).Should().NotBeNull(); - } - - - sw.Stop(); - - Console.WriteLine("Took " + sw.Elapsed); - } - - [Test] - public void get_episode_file_count_x100() - { - - Mocker.SetConstant(db); - Mocker.Resolve(); - Mocker.Resolve(); - var mediaProvider = Mocker.Resolve(); - - - Thread.Sleep(1000); - - - var random = new Random(); - Console.WriteLine("Starting Test"); - - var sw = Stopwatch.StartNew(); - for (int i = 0; i < 100; i++) - { - mediaProvider.GetEpisodeFilesCount(random.Next(1, 5)).Should().NotBeNull(); - } - - - sw.Stop(); - - Console.WriteLine("Took " + sw.Elapsed); - } - - [Test] - public void get_episode_file_count_x1000() - { - - Mocker.SetConstant(db); - Mocker.Resolve(); - Mocker.Resolve(); - var mediaProvider = Mocker.Resolve(); - - - Thread.Sleep(1000); - - - var random = new Random(); - Console.WriteLine("Starting Test"); - - var sw = Stopwatch.StartNew(); - for (int i = 0; i < 1000; i++) - { - mediaProvider.GetEpisodeFilesCount(random.Next(1, 5)).Should().NotBeNull(); - } - - - sw.Stop(); - - Console.WriteLine("Took " + sw.Elapsed); - } - - - [Test] - public void get_season_count_x500() - { - - Mocker.SetConstant(db); - var provider = Mocker.Resolve(); - - - Thread.Sleep(1000); - - - var random = new Random(); - Console.WriteLine("Starting Test"); - - var sw = Stopwatch.StartNew(); - for (int i = 0; i < 500; i++) - { - provider.GetSeasons(random.Next(1, 10)).Should().HaveSameCount(seasonsNumbers); - } - - - sw.Stop(); - - Console.WriteLine("Took " + sw.Elapsed); - } - - - - } -} diff --git a/NzbDrone.Core/Datastore/BasicRepository.cs b/NzbDrone.Core/Datastore/BasicRepository.cs index 09cf677a9..65563379d 100644 --- a/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/NzbDrone.Core/Datastore/BasicRepository.cs @@ -5,12 +5,14 @@ namespace NzbDrone.Core.Datastore { public interface IBasicRepository { - List All(); + IEnumerable All(); TModel Get(int id); - TModel Add(TModel model); + TModel Insert(TModel model); TModel Update(TModel model); TModel Upsert(TModel model); void Delete(int id); + IList InsertMany(IList model); + IList UpdateMany(IList model); } public class BasicRepository : IBasicRepository where TModel : ModelBase, new() @@ -24,7 +26,7 @@ namespace NzbDrone.Core.Datastore protected IEnumerable Queryable { get { return ObjectDatabase.AsQueryable(); } } - public List All() + public IEnumerable All() { return Queryable.ToList(); } @@ -34,7 +36,7 @@ namespace NzbDrone.Core.Datastore return Queryable.Single(c => c.OID == id); } - public TModel Add(TModel model) + public TModel Insert(TModel model) { return ObjectDatabase.Insert(model); } @@ -44,6 +46,16 @@ namespace NzbDrone.Core.Datastore return ObjectDatabase.Update(model); } + public IList InsertMany(IList model) + { + return ObjectDatabase.InsertMany(model); + } + + public IList UpdateMany(IList model) + { + return ObjectDatabase.UpdateMany(model); + } + public TModel Upsert(TModel model) { if(model.OID == 0) diff --git a/NzbDrone.Core/Datastore/PetaPoco/EpisodeSeasonRelator.cs b/NzbDrone.Core/Datastore/PetaPoco/EpisodeSeasonRelator.cs index 5f726cdaf..7a0078997 100644 --- a/NzbDrone.Core/Datastore/PetaPoco/EpisodeSeasonRelator.cs +++ b/NzbDrone.Core/Datastore/PetaPoco/EpisodeSeasonRelator.cs @@ -22,7 +22,7 @@ namespace PetaPoco episode.EpisodeFile = (episode.EpisodeFileId == 0 ? null : episodeFile); // Is this the same season as the current one we're processing - if (_current != null && _current.SeasonId == season.SeasonId) + if (_current != null && _current.OID == season.OID) { // Yes, just add this post to the current author's collection of posts _current.Episodes.Add(episode); diff --git a/NzbDrone.Core/DecisionEngine/AcceptableSizeSpecification.cs b/NzbDrone.Core/DecisionEngine/AcceptableSizeSpecification.cs index 209ca0927..dafff152e 100644 --- a/NzbDrone.Core/DecisionEngine/AcceptableSizeSpecification.cs +++ b/NzbDrone.Core/DecisionEngine/AcceptableSizeSpecification.cs @@ -10,13 +10,13 @@ namespace NzbDrone.Core.DecisionEngine public class AcceptableSizeSpecification { private readonly QualityTypeProvider _qualityTypeProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public AcceptableSizeSpecification(QualityTypeProvider qualityTypeProvider, EpisodeProvider episodeProvider) + public AcceptableSizeSpecification(QualityTypeProvider qualityTypeProvider, EpisodeService episodeService) { _qualityTypeProvider = qualityTypeProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; } public AcceptableSizeSpecification() @@ -56,7 +56,7 @@ namespace NzbDrone.Core.DecisionEngine //Check if there was only one episode parsed //and it is the first or last episode of the season if (subject.EpisodeNumbers != null && subject.EpisodeNumbers.Count == 1 && - _episodeProvider.IsFirstOrLastEpisodeOfSeason(series.SeriesId, + _episodeService.IsFirstOrLastEpisodeOfSeason(series.SeriesId, subject.SeasonNumber, subject.EpisodeNumbers[0])) { maxSize = maxSize * 2; diff --git a/NzbDrone.Core/DecisionEngine/MonitoredEpisodeSpecification.cs b/NzbDrone.Core/DecisionEngine/MonitoredEpisodeSpecification.cs index 5c929771f..464f48116 100644 --- a/NzbDrone.Core/DecisionEngine/MonitoredEpisodeSpecification.cs +++ b/NzbDrone.Core/DecisionEngine/MonitoredEpisodeSpecification.cs @@ -8,14 +8,14 @@ namespace NzbDrone.Core.DecisionEngine { public class MonitoredEpisodeSpecification { - private readonly SeriesProvider _seriesProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public MonitoredEpisodeSpecification(SeriesProvider seriesProvider, EpisodeProvider episodeProvider) + public MonitoredEpisodeSpecification(EpisodeService episodeService, ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; + _seriesRepository = seriesRepository; } public MonitoredEpisodeSpecification() @@ -25,7 +25,7 @@ namespace NzbDrone.Core.DecisionEngine public virtual bool IsSatisfiedBy(EpisodeParseResult subject) { - var series = _seriesProvider.FindSeries(subject.CleanTitle); + var series = _seriesRepository.GetByTitle(subject.CleanTitle); if (series == null) { @@ -41,7 +41,7 @@ namespace NzbDrone.Core.DecisionEngine return false; } - var episodes = _episodeProvider.GetEpisodesByParseResult(subject); + var episodes = _episodeService.GetEpisodesByParseResult(subject); subject.Episodes = episodes; //return monitored if any of the episodes are monitored diff --git a/NzbDrone.Core/DecisionEngine/UpgradeHistorySpecification.cs b/NzbDrone.Core/DecisionEngine/UpgradeHistorySpecification.cs index 36bb1f6e6..a3c3f78dd 100644 --- a/NzbDrone.Core/DecisionEngine/UpgradeHistorySpecification.cs +++ b/NzbDrone.Core/DecisionEngine/UpgradeHistorySpecification.cs @@ -8,14 +8,14 @@ namespace NzbDrone.Core.DecisionEngine { public class UpgradeHistorySpecification { - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly HistoryProvider _historyProvider; private readonly QualityUpgradeSpecification _qualityUpgradeSpecification; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public UpgradeHistorySpecification(EpisodeProvider episodeProvider, HistoryProvider historyProvider, QualityUpgradeSpecification qualityUpgradeSpecification) + public UpgradeHistorySpecification(EpisodeService episodeService, HistoryProvider historyProvider, QualityUpgradeSpecification qualityUpgradeSpecification) { - _episodeProvider = episodeProvider; + _episodeService = episodeService; _historyProvider = historyProvider; _qualityUpgradeSpecification = qualityUpgradeSpecification; } diff --git a/NzbDrone.Core/Instrumentation/LogInjectionModule.cs b/NzbDrone.Core/Instrumentation/LogInjectionModule.cs index d3df3a016..4d7ace9d5 100644 --- a/NzbDrone.Core/Instrumentation/LogInjectionModule.cs +++ b/NzbDrone.Core/Instrumentation/LogInjectionModule.cs @@ -12,6 +12,7 @@ namespace NzbDrone.Core.Instrumentation { registration.Preparing += OnComponentPreparing; } + static void OnComponentPreparing(object sender, PreparingEventArgs e) { e.Parameters = e.Parameters.Union(new[] @@ -19,7 +20,7 @@ namespace NzbDrone.Core.Instrumentation new ResolvedParameter((p, i) => p.ParameterType == typeof(Logger), (p,i)=> GetLogger(p.Member.DeclaringType)) }); } - + private static object GetLogger(Type type) { const string STRING_TO_REMOVE = "NzbDrone"; diff --git a/NzbDrone.Core/Jobs/BacklogSearchJob.cs b/NzbDrone.Core/Jobs/BacklogSearchJob.cs index 3e94737de..da0b2666c 100644 --- a/NzbDrone.Core/Jobs/BacklogSearchJob.cs +++ b/NzbDrone.Core/Jobs/BacklogSearchJob.cs @@ -13,17 +13,17 @@ namespace NzbDrone.Core.Jobs { public class BacklogSearchJob : IJob { - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly EpisodeSearchJob _episodeSearchJob; private readonly SeasonSearchJob _seasonSearchJob; private readonly ConfigProvider _configProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public BacklogSearchJob(EpisodeProvider episodeProvider, EpisodeSearchJob episodeSearchJob, + public BacklogSearchJob(EpisodeService episodeService, EpisodeSearchJob episodeSearchJob, SeasonSearchJob seasonSearchJob, ConfigProvider configProvider) { - _episodeProvider = episodeProvider; + _episodeService = episodeService; _episodeSearchJob = episodeSearchJob; _seasonSearchJob = seasonSearchJob; _configProvider = configProvider; @@ -60,7 +60,7 @@ namespace NzbDrone.Core.Jobs var seriesId = group.Key.SeriesId; var seasonNumber = group.Key.SeasonNumber; - var countInDb = _episodeProvider.GetEpisodeNumbersBySeason(seriesId, seasonNumber).Count; + var countInDb = _episodeService.GetEpisodeNumbersBySeason(seriesId, seasonNumber).Count; //Todo: Download a full season if more than n% is missing? @@ -83,7 +83,7 @@ namespace NzbDrone.Core.Jobs //Process the list of remaining episodes, 1 by 1 foreach (var episode in individualEpisodes) { - _episodeSearchJob.Start(notification, new { EpisodeId = episode.EpisodeId}); + _episodeSearchJob.Start(notification, new { EpisodeId = episode.OID}); } } @@ -92,7 +92,7 @@ namespace NzbDrone.Core.Jobs if (!_configProvider.EnableBacklogSearching) { Logger.Trace("Backlog searching is not enabled, only running for explicitly enabled series."); - return _episodeProvider.EpisodesWithoutFiles(true).Where(e => + return _episodeService.EpisodesWithoutFiles(true).Where(e => e.Series.BacklogSetting == BacklogSettingType.Enable && e.Series.Monitored ).ToList(); @@ -101,7 +101,7 @@ namespace NzbDrone.Core.Jobs else { Logger.Trace("Backlog searching is enabled, skipping explicity disabled series."); - return _episodeProvider.EpisodesWithoutFiles(true).Where(e => + return _episodeService.EpisodesWithoutFiles(true).Where(e => e.Series.BacklogSetting != BacklogSettingType.Disable && e.Series.Monitored ).ToList(); diff --git a/NzbDrone.Core/Jobs/BannerDownloadJob.cs b/NzbDrone.Core/Jobs/BannerDownloadJob.cs index be3f08213..4718b2c79 100644 --- a/NzbDrone.Core/Jobs/BannerDownloadJob.cs +++ b/NzbDrone.Core/Jobs/BannerDownloadJob.cs @@ -13,16 +13,18 @@ namespace NzbDrone.Core.Jobs { public class BannerDownloadJob : IJob { - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly BannerProvider _bannerProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private const string BANNER_URL_PREFIX = "http://www.thetvdb.com/banners/"; - public BannerDownloadJob(SeriesProvider seriesProvider, BannerProvider bannerProvider) + public BannerDownloadJob(ISeriesService seriesService, BannerProvider bannerProvider, ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; + _seriesService = seriesService; _bannerProvider = bannerProvider; + _seriesRepository = seriesRepository; } public BannerDownloadJob() @@ -45,7 +47,7 @@ namespace NzbDrone.Core.Jobs if (options != null) { - Series series = _seriesProvider.GetSeries(options.SeriesId); + Series series = _seriesRepository.Get(options.SeriesId); if (series != null && !String.IsNullOrEmpty(series.BannerUrl)) { @@ -55,7 +57,7 @@ namespace NzbDrone.Core.Jobs return; } - var seriesInDb = _seriesProvider.GetAllSeries(); + var seriesInDb = _seriesRepository.All(); foreach (var series in seriesInDb.Where(s => !String.IsNullOrEmpty(s.BannerUrl))) { diff --git a/NzbDrone.Core/Jobs/ConvertEpisodeJob.cs b/NzbDrone.Core/Jobs/ConvertEpisodeJob.cs index 5c6390f17..12e8d00c5 100644 --- a/NzbDrone.Core/Jobs/ConvertEpisodeJob.cs +++ b/NzbDrone.Core/Jobs/ConvertEpisodeJob.cs @@ -13,16 +13,16 @@ namespace NzbDrone.Core.Jobs { private readonly HandbrakeProvider _handbrakeProvider; private readonly AtomicParsleyProvider _atomicParsleyProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public ConvertEpisodeJob(HandbrakeProvider handbrakeProvider, AtomicParsleyProvider atomicParsleyProvider, - EpisodeProvider episodeProvider) + EpisodeService episodeService) { _handbrakeProvider = handbrakeProvider; _atomicParsleyProvider = atomicParsleyProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; } public string Name @@ -41,7 +41,7 @@ namespace NzbDrone.Core.Jobs if (options == null || options.EpisodeId <= 0) throw new ArgumentNullException(options); - Episode episode = _episodeProvider.GetEpisode(options.EpisodeId); + Episode episode = _episodeService.GetEpisode(options.EpisodeId); notification.CurrentMessage = String.Format("Starting Conversion for {0}", episode); var outputFile = _handbrakeProvider.ConvertFile(episode, notification); diff --git a/NzbDrone.Core/Jobs/DeleteSeriesJob.cs b/NzbDrone.Core/Jobs/DeleteSeriesJob.cs index fa8a86282..b662ab10b 100644 --- a/NzbDrone.Core/Jobs/DeleteSeriesJob.cs +++ b/NzbDrone.Core/Jobs/DeleteSeriesJob.cs @@ -10,15 +10,17 @@ namespace NzbDrone.Core.Jobs { public class DeleteSeriesJob : IJob { - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly RecycleBinProvider _recycleBinProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public DeleteSeriesJob(SeriesProvider seriesProvider, RecycleBinProvider recycleBinProvider) + public DeleteSeriesJob(ISeriesService seriesService, RecycleBinProvider recycleBinProvider, ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; + _seriesService = seriesService; _recycleBinProvider = recycleBinProvider; + _seriesRepository = seriesRepository; } public string Name @@ -46,12 +48,12 @@ namespace NzbDrone.Core.Jobs { Logger.Trace("Deleting Series [{0}]", seriesId); - var series = _seriesProvider.GetSeries(seriesId); + var series = _seriesRepository.Get(seriesId); var title = series.Title; notification.CurrentMessage = String.Format("Deleting '{0}' from database", title); - _seriesProvider.DeleteSeries(seriesId); + _seriesRepository.Delete(seriesId); notification.CurrentMessage = String.Format("Successfully deleted '{0}' from database", title); diff --git a/NzbDrone.Core/Jobs/DiskScanJob.cs b/NzbDrone.Core/Jobs/DiskScanJob.cs index cefbb5af0..0dc6e9d40 100644 --- a/NzbDrone.Core/Jobs/DiskScanJob.cs +++ b/NzbDrone.Core/Jobs/DiskScanJob.cs @@ -13,17 +13,19 @@ namespace NzbDrone.Core.Jobs { public class DiskScanJob : IJob { - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly DiskScanProvider _diskScanProvider; private readonly ConfigProvider _configProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public DiskScanJob(SeriesProvider seriesProvider, DiskScanProvider diskScanProvider, - ConfigProvider configProvider) + public DiskScanJob(ISeriesService seriesService, DiskScanProvider diskScanProvider, + ConfigProvider configProvider, ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; + _seriesService = seriesService; _diskScanProvider = diskScanProvider; _configProvider = configProvider; + _seriesRepository = seriesRepository; } public DiskScanJob() @@ -46,14 +48,14 @@ namespace NzbDrone.Core.Jobs if (options == null || options.SeriesId == 0) { if (_configProvider.IgnoreArticlesWhenSortingSeries) - seriesToScan = _seriesProvider.GetAllSeries().OrderBy(o => o.Title.IgnoreArticles()).ToList(); + seriesToScan = _seriesRepository.All().OrderBy(o => o.Title.IgnoreArticles()).ToList(); else - seriesToScan = _seriesProvider.GetAllSeries().OrderBy(o => o.Title).ToList(); + seriesToScan = _seriesRepository.All().OrderBy(o => o.Title).ToList(); } else { - seriesToScan = new List() { _seriesProvider.GetSeries(options.SeriesId) }; + seriesToScan = new List() { _seriesRepository.Get(options.SeriesId) }; } foreach (var series in seriesToScan) diff --git a/NzbDrone.Core/Jobs/EpisodeSearchJob.cs b/NzbDrone.Core/Jobs/EpisodeSearchJob.cs index 590ab1d92..ff09c7e84 100644 --- a/NzbDrone.Core/Jobs/EpisodeSearchJob.cs +++ b/NzbDrone.Core/Jobs/EpisodeSearchJob.cs @@ -12,18 +12,18 @@ namespace NzbDrone.Core.Jobs { public class EpisodeSearchJob : IJob { - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly UpgradePossibleSpecification _upgradePossibleSpecification; private readonly EpisodeSearch _episodeSearch; private readonly DailyEpisodeSearch _dailyEpisodeSearch; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public EpisodeSearchJob(EpisodeProvider episodeProvider, UpgradePossibleSpecification upgradePossibleSpecification, + public EpisodeSearchJob(EpisodeService episodeService, UpgradePossibleSpecification upgradePossibleSpecification, EpisodeSearch episodeSearch, DailyEpisodeSearch dailyEpisodeSearch) { if(dailyEpisodeSearch == null) throw new ArgumentNullException("dailyEpisodeSearch"); - _episodeProvider = episodeProvider; + _episodeService = episodeService; _upgradePossibleSpecification = upgradePossibleSpecification; _episodeSearch = episodeSearch; _dailyEpisodeSearch = dailyEpisodeSearch; @@ -49,7 +49,7 @@ namespace NzbDrone.Core.Jobs if (options == null || options.EpisodeId <= 0) throw new ArgumentException("options"); - Episode episode = _episodeProvider.GetEpisode(options.EpisodeId); + Episode episode = _episodeService.GetEpisode(options.EpisodeId); if (episode == null) { @@ -64,7 +64,7 @@ namespace NzbDrone.Core.Jobs return; } - if (episode.Series.IsDaily) + if (episode.Series.SeriesType == SeriesType.Daily) { if (!episode.AirDate.HasValue) { diff --git a/NzbDrone.Core/Jobs/ImportNewSeriesJob.cs b/NzbDrone.Core/Jobs/ImportNewSeriesJob.cs index 2aa7786fa..4b924639d 100644 --- a/NzbDrone.Core/Jobs/ImportNewSeriesJob.cs +++ b/NzbDrone.Core/Jobs/ImportNewSeriesJob.cs @@ -15,32 +15,36 @@ namespace NzbDrone.Core.Jobs /// public class ImportNewSeriesJob : IJob { - private readonly SeriesProvider _seriesProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly ISeriesService _seriesService; + private readonly EpisodeService _episodeService; private readonly MediaFileProvider _mediaFileProvider; private readonly UpdateInfoJob _updateInfoJob; private readonly DiskScanJob _diskScanJob; private readonly BannerDownloadJob _bannerDownloadJob; - private readonly SeasonProvider _seasonProvider; + private readonly ISeasonRepository _seasonRepository; private readonly XemUpdateJob _xemUpdateJob; + private readonly ISeriesRepository _seriesRepository; + private readonly ISeasonService _seasonService; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private List _attemptedSeries; - public ImportNewSeriesJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, + public ImportNewSeriesJob(ISeriesService seriesService, EpisodeService episodeService, MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob, DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob, - SeasonProvider seasonProvider, XemUpdateJob xemUpdateJob) + ISeasonRepository seasonRepository, XemUpdateJob xemUpdateJob, ISeriesRepository seriesRepository,ISeasonService seasonService) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _seriesService = seriesService; + _episodeService = episodeService; _mediaFileProvider = mediaFileProvider; _updateInfoJob = updateInfoJob; _diskScanJob = diskScanJob; _bannerDownloadJob = bannerDownloadJob; - _seasonProvider = seasonProvider; + _seasonRepository = seasonRepository; _xemUpdateJob = xemUpdateJob; + _seriesRepository = seriesRepository; + _seasonService = seasonService; } public string Name @@ -61,7 +65,7 @@ namespace NzbDrone.Core.Jobs private void ScanSeries(ProgressNotification notification) { - var syncList = _seriesProvider.GetAllSeries().Where(s => s.LastInfoSync == null && !_attemptedSeries.Contains(s.SeriesId)).ToList(); + var syncList = _seriesRepository.All().Where(s => s.LastInfoSync == null && !_attemptedSeries.Contains(s.SeriesId)).ToList(); if (syncList.Count == 0) { return; @@ -77,7 +81,7 @@ namespace NzbDrone.Core.Jobs _updateInfoJob.Start(notification, new { SeriesId = currentSeries.SeriesId }); _diskScanJob.Start(notification, new { SeriesId = currentSeries.SeriesId }); - var updatedSeries = _seriesProvider.GetSeries(currentSeries.SeriesId); + var updatedSeries = _seriesRepository.Get(currentSeries.SeriesId); AutoIgnoreSeasons(updatedSeries.SeriesId); //Download the banner for the new series @@ -105,14 +109,14 @@ namespace NzbDrone.Core.Jobs if (episodeFiles.Count() != 0) { - var seasons = _episodeProvider.GetSeasons(seriesId); + var seasons = _seasonRepository.GetSeasonNumbers(seriesId); var currentSeasons = seasons.Max(); foreach (var season in seasons) { if (season != currentSeasons && !episodeFiles.Any(e => e.SeasonNumber == season)) { - _seasonProvider.SetIgnore(seriesId, season, true); + _seasonService.SetIgnore(seriesId, season, true); } } } diff --git a/NzbDrone.Core/Jobs/JobRepository.cs b/NzbDrone.Core/Jobs/JobRepository.cs index dfb58c830..0a675c4aa 100644 --- a/NzbDrone.Core/Jobs/JobRepository.cs +++ b/NzbDrone.Core/Jobs/JobRepository.cs @@ -39,7 +39,7 @@ namespace NzbDrone.Core.Jobs public void Init() { var currentJobs = All(); - _logger.Debug("Initializing jobs. Available: {0} Existing:{1}", _jobs.Count(), currentJobs.Count); + _logger.Debug("Initializing jobs. Available: {0} Existing:{1}", _jobs.Count(), currentJobs.Count()); foreach (var currentJob in currentJobs) { diff --git a/NzbDrone.Core/Jobs/PastWeekBacklogSearchJob.cs b/NzbDrone.Core/Jobs/PastWeekBacklogSearchJob.cs index dcfc81836..4ce9205eb 100644 --- a/NzbDrone.Core/Jobs/PastWeekBacklogSearchJob.cs +++ b/NzbDrone.Core/Jobs/PastWeekBacklogSearchJob.cs @@ -13,16 +13,16 @@ namespace NzbDrone.Core.Jobs { public class PastWeekBacklogSearchJob : IJob { - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly EpisodeSearchJob _episodeSearchJob; private readonly ConfigProvider _configProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public PastWeekBacklogSearchJob(EpisodeProvider episodeProvider, EpisodeSearchJob episodeSearchJob, + public PastWeekBacklogSearchJob(EpisodeService episodeService, EpisodeSearchJob episodeSearchJob, ConfigProvider configProvider) { - _episodeProvider = episodeProvider; + _episodeService = episodeService; _episodeSearchJob = episodeSearchJob; _configProvider = configProvider; } @@ -44,13 +44,13 @@ namespace NzbDrone.Core.Jobs Logger.Debug("Processing missing episodes from the past week, count: {0}", missingEpisodes.Count); foreach (var episode in missingEpisodes) { - _episodeSearchJob.Start(notification, new { EpisodeId = episode.EpisodeId }); + _episodeSearchJob.Start(notification, new { EpisodeId = episode.OID }); } } public List GetMissingForEnabledSeries() { - return _episodeProvider.EpisodesWithoutFiles(true).Where(e => + return _episodeService.EpisodesWithoutFiles(true).Where(e => e.AirDate >= DateTime.Today.AddDays(-7) && e.Series.Monitored ).ToList(); diff --git a/NzbDrone.Core/Jobs/RecentBacklogSearchJob.cs b/NzbDrone.Core/Jobs/RecentBacklogSearchJob.cs index 7cdf3bba5..089348420 100644 --- a/NzbDrone.Core/Jobs/RecentBacklogSearchJob.cs +++ b/NzbDrone.Core/Jobs/RecentBacklogSearchJob.cs @@ -13,16 +13,16 @@ namespace NzbDrone.Core.Jobs { public class RecentBacklogSearchJob : IJob { - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly EpisodeSearchJob _episodeSearchJob; private readonly ConfigProvider _configProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public RecentBacklogSearchJob(EpisodeProvider episodeProvider, EpisodeSearchJob episodeSearchJob, + public RecentBacklogSearchJob(EpisodeService episodeService, EpisodeSearchJob episodeSearchJob, ConfigProvider configProvider) { - _episodeProvider = episodeProvider; + _episodeService = episodeService; _episodeSearchJob = episodeSearchJob; _configProvider = configProvider; } @@ -44,7 +44,7 @@ namespace NzbDrone.Core.Jobs Logger.Debug("Processing missing episodes from the last 30 days, count: {0}", missingEpisodes.Count); foreach (var episode in missingEpisodes) { - _episodeSearchJob.Start(notification, new { EpisodeId = episode.EpisodeId }); + _episodeSearchJob.Start(notification, new { EpisodeId = episode.OID }); } } @@ -53,7 +53,7 @@ namespace NzbDrone.Core.Jobs if (!_configProvider.EnableBacklogSearching) { Logger.Trace("Backlog searching is not enabled, only running for explicitly enabled series."); - return _episodeProvider.EpisodesWithoutFiles(true).Where(e => + return _episodeService.EpisodesWithoutFiles(true).Where(e => e.AirDate >= DateTime.Today.AddDays(-30) && e.Series.BacklogSetting == BacklogSettingType.Enable && e.Series.Monitored @@ -62,8 +62,8 @@ namespace NzbDrone.Core.Jobs else { - Logger.Trace("Backlog searching is enabled, skipping explicity disabled series."); - return _episodeProvider.EpisodesWithoutFiles(true).Where(e => + Logger.Trace("Backlog searching is enabled, skipping explicitly disabled series."); + return _episodeService.EpisodesWithoutFiles(true).Where(e => e.AirDate >= DateTime.Today.AddDays(-30) && e.Series.BacklogSetting != BacklogSettingType.Disable && e.Series.Monitored diff --git a/NzbDrone.Core/Jobs/RefreshEpsiodeMetadata.cs b/NzbDrone.Core/Jobs/RefreshEpsiodeMetadata.cs index 36836360a..f297ab7f9 100644 --- a/NzbDrone.Core/Jobs/RefreshEpsiodeMetadata.cs +++ b/NzbDrone.Core/Jobs/RefreshEpsiodeMetadata.cs @@ -12,17 +12,19 @@ namespace NzbDrone.Core.Jobs public class RefreshEpisodeMetadata : IJob { private readonly MediaFileProvider _mediaFileProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly MetadataProvider _metadataProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public RefreshEpisodeMetadata(MediaFileProvider mediaFileProvider, SeriesProvider seriesProvider, - MetadataProvider metadataProvider) + public RefreshEpisodeMetadata(MediaFileProvider mediaFileProvider, ISeriesService seriesService, + MetadataProvider metadataProvider,ISeriesRepository seriesRepository) { _mediaFileProvider = mediaFileProvider; - _seriesProvider = seriesProvider; + _seriesService = seriesService; _metadataProvider = metadataProvider; + _seriesRepository = seriesRepository; } public string Name @@ -40,10 +42,10 @@ namespace NzbDrone.Core.Jobs List seriesToRefresh; if (options == null || options.SeriesId <= 0) - seriesToRefresh = _seriesProvider.GetAllSeries().ToList(); + seriesToRefresh = _seriesRepository.All().ToList(); else - seriesToRefresh = new List { _seriesProvider.GetSeries(options.SeriesId) }; + seriesToRefresh = new List { _seriesRepository.Get(options.SeriesId) }; foreach(var series in seriesToRefresh) { diff --git a/NzbDrone.Core/Jobs/RenameSeasonJob.cs b/NzbDrone.Core/Jobs/RenameSeasonJob.cs index 1b0e0da71..b3c09f8c7 100644 --- a/NzbDrone.Core/Jobs/RenameSeasonJob.cs +++ b/NzbDrone.Core/Jobs/RenameSeasonJob.cs @@ -5,7 +5,6 @@ using NLog; using NzbDrone.Core.Tv; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Providers; -using NzbDrone.Core.Repository; namespace NzbDrone.Core.Jobs { @@ -14,20 +13,22 @@ namespace NzbDrone.Core.Jobs private readonly MediaFileProvider _mediaFileProvider; private readonly DiskScanProvider _diskScanProvider; private readonly ExternalNotificationProvider _externalNotificationProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly MetadataProvider _metadataProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public RenameSeasonJob(MediaFileProvider mediaFileProvider, DiskScanProvider diskScanProvider, - ExternalNotificationProvider externalNotificationProvider, SeriesProvider seriesProvider, - MetadataProvider metadataProvider) + ExternalNotificationProvider externalNotificationProvider, ISeriesService seriesService, + MetadataProvider metadataProvider,ISeriesRepository seriesRepository) { _mediaFileProvider = mediaFileProvider; _diskScanProvider = diskScanProvider; _externalNotificationProvider = externalNotificationProvider; - _seriesProvider = seriesProvider; + _seriesService = seriesService; _metadataProvider = metadataProvider; + _seriesRepository = seriesRepository; } public string Name @@ -48,7 +49,7 @@ namespace NzbDrone.Core.Jobs if (options.SeasonNumber < 0) throw new ArgumentException("options.SeasonNumber"); - var series = _seriesProvider.GetSeries(options.SeriesId); + var series = _seriesRepository.Get(options.SeriesId); notification.CurrentMessage = String.Format("Renaming episodes for {0} Season {1}", series.Title, options.SeasonNumber); diff --git a/NzbDrone.Core/Jobs/RenameSeriesJob.cs b/NzbDrone.Core/Jobs/RenameSeriesJob.cs index d66b761bd..ded5ad566 100644 --- a/NzbDrone.Core/Jobs/RenameSeriesJob.cs +++ b/NzbDrone.Core/Jobs/RenameSeriesJob.cs @@ -14,20 +14,22 @@ namespace NzbDrone.Core.Jobs private readonly MediaFileProvider _mediaFileProvider; private readonly DiskScanProvider _diskScanProvider; private readonly ExternalNotificationProvider _externalNotificationProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly MetadataProvider _metadataProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public RenameSeriesJob(MediaFileProvider mediaFileProvider, DiskScanProvider diskScanProvider, - ExternalNotificationProvider externalNotificationProvider, SeriesProvider seriesProvider, - MetadataProvider metadataProvider) + ExternalNotificationProvider externalNotificationProvider, ISeriesService seriesService, + MetadataProvider metadataProvider,ISeriesRepository seriesRepository) { _mediaFileProvider = mediaFileProvider; _diskScanProvider = diskScanProvider; _externalNotificationProvider = externalNotificationProvider; - _seriesProvider = seriesProvider; + _seriesService = seriesService; _metadataProvider = metadataProvider; + _seriesRepository = seriesRepository; } public string Name @@ -46,12 +48,12 @@ namespace NzbDrone.Core.Jobs if (options == null || options.SeriesId <= 0) { - seriesToRename = _seriesProvider.GetAllSeries().ToList(); + seriesToRename = _seriesRepository.All().ToList(); } else { - seriesToRename = new List{ _seriesProvider.GetSeries(options.SeriesId) }; + seriesToRename = new List{ _seriesRepository.Get(options.SeriesId) }; } foreach(var series in seriesToRename) diff --git a/NzbDrone.Core/Jobs/SeasonSearchJob.cs b/NzbDrone.Core/Jobs/SeasonSearchJob.cs index 21a4e884c..a460a8947 100644 --- a/NzbDrone.Core/Jobs/SeasonSearchJob.cs +++ b/NzbDrone.Core/Jobs/SeasonSearchJob.cs @@ -13,16 +13,16 @@ namespace NzbDrone.Core.Jobs { private readonly SearchProvider _searchProvider; private readonly EpisodeSearchJob _episodeSearchJob; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public SeasonSearchJob(SearchProvider searchProvider, EpisodeSearchJob episodeSearchJob, - EpisodeProvider episodeProvider) + EpisodeService episodeService) { _searchProvider = searchProvider; _episodeSearchJob = episodeSearchJob; - _episodeProvider = episodeProvider; + _episodeService = episodeService; } public SeasonSearchJob() @@ -57,7 +57,7 @@ namespace NzbDrone.Core.Jobs // return; Logger.Debug("Getting episodes from database for series: {0} and season: {1}", options.SeriesId, options.SeasonNumber); - List episodes = _episodeProvider.GetEpisodesBySeason(options.SeriesId, options.SeasonNumber); + List episodes = _episodeService.GetEpisodesBySeason(options.SeriesId, options.SeasonNumber); if (episodes == null || episodes.Count == 0) { @@ -68,11 +68,11 @@ namespace NzbDrone.Core.Jobs if (episodes.Count == successes.Count) return; - var missingEpisodes = episodes.Select(e => e.EpisodeId).Except(successes).ToList(); + var missingEpisodes = episodes.Select(e => e.OID).Except(successes).ToList(); - foreach (var episode in episodes.Where(e => !e.Ignored && missingEpisodes.Contains(e.EpisodeId)).OrderBy(o => o.EpisodeNumber)) + foreach (var episode in episodes.Where(e => !e.Ignored && missingEpisodes.Contains(e.OID)).OrderBy(o => o.EpisodeNumber)) { - _episodeSearchJob.Start(notification, new { EpisodeId = episode.EpisodeId }); + _episodeSearchJob.Start(notification, new { EpisodeId = episode.OID }); } } } diff --git a/NzbDrone.Core/Jobs/SeriesSearchJob.cs b/NzbDrone.Core/Jobs/SeriesSearchJob.cs index 60e232d51..6bb06e923 100644 --- a/NzbDrone.Core/Jobs/SeriesSearchJob.cs +++ b/NzbDrone.Core/Jobs/SeriesSearchJob.cs @@ -12,15 +12,14 @@ namespace NzbDrone.Core.Jobs public class SeriesSearchJob : IJob { private readonly SeasonSearchJob _seasonSearchJob; - private readonly SeasonProvider _seasonProvider; + private readonly ISeasonRepository _seasonRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public SeriesSearchJob(SeasonSearchJob seasonSearchJob, - SeasonProvider seasonProvider) + public SeriesSearchJob(SeasonSearchJob seasonSearchJob, ISeasonRepository seasonRepository) { _seasonSearchJob = seasonSearchJob; - _seasonProvider = seasonProvider; + _seasonRepository = seasonRepository; } public string Name @@ -39,11 +38,11 @@ namespace NzbDrone.Core.Jobs throw new ArgumentException("options.SeriesId"); logger.Debug("Getting seasons from database for series: {0}", options.SeriesId); - IList seasons = _seasonProvider.GetSeasons(options.SeriesId); + IList seasons = _seasonRepository.GetSeasonBySeries(options.SeriesId); foreach (var season in seasons.Where(s => s > 0)) { - if (!_seasonProvider.IsIgnored(options.SeriesId, season)) + if (!_seasonRepository.IsIgnored(options.SeriesId, season)) { _seasonSearchJob.Start(notification, new { SeriesId = options.SeriesId, SeasonNumber = season }); } diff --git a/NzbDrone.Core/Jobs/UpdateInfoJob.cs b/NzbDrone.Core/Jobs/UpdateInfoJob.cs index d84e7e446..01ae91e56 100644 --- a/NzbDrone.Core/Jobs/UpdateInfoJob.cs +++ b/NzbDrone.Core/Jobs/UpdateInfoJob.cs @@ -13,19 +13,21 @@ namespace NzbDrone.Core.Jobs { public class UpdateInfoJob : IJob { - private readonly SeriesProvider _seriesProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly ISeriesService _seriesService; + private readonly EpisodeService _episodeService; private readonly ReferenceDataProvider _referenceDataProvider; private readonly ConfigProvider _configProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public UpdateInfoJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, - ReferenceDataProvider referenceDataProvider, ConfigProvider configProvider) + public UpdateInfoJob(ISeriesService seriesService, EpisodeService episodeService, + ReferenceDataProvider referenceDataProvider, ConfigProvider configProvider, ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _seriesService = seriesService; + _episodeService = episodeService; _referenceDataProvider = referenceDataProvider; _configProvider = configProvider; + _seriesRepository = seriesRepository; } public UpdateInfoJob() @@ -49,14 +51,14 @@ namespace NzbDrone.Core.Jobs if (options == null || options.SeriesId == 0) { if (_configProvider.IgnoreArticlesWhenSortingSeries) - seriesToUpdate = _seriesProvider.GetAllSeries().OrderBy(o => o.Title.IgnoreArticles()).ToList(); + seriesToUpdate = _seriesRepository.All().OrderBy(o => o.Title.IgnoreArticles()).ToList(); else - seriesToUpdate = _seriesProvider.GetAllSeries().OrderBy(o => o.Title).ToList(); + seriesToUpdate = _seriesRepository.All().OrderBy(o => o.Title).ToList(); } else { - seriesToUpdate = new List { _seriesProvider.GetSeries(options.SeriesId) }; + seriesToUpdate = new List { _seriesRepository.Get(options.SeriesId) }; } //Update any Daily Series in the DB with the IsDaily flag @@ -67,8 +69,8 @@ namespace NzbDrone.Core.Jobs try { notification.CurrentMessage = "Updating " + series.Title; - _seriesProvider.UpdateSeriesInfo(series.SeriesId); - _episodeProvider.RefreshEpisodeInfo(series); + _seriesService.UpdateSeriesInfo(series.SeriesId); + _episodeService.RefreshEpisodeInfo(series); notification.CurrentMessage = "Update completed for " + series.Title; } diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 733627dc1..5c319928a 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -302,6 +302,9 @@ + + + @@ -353,7 +356,7 @@ - + @@ -454,7 +457,7 @@ Code - + Code diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index 1ddbbe203..7141a992f 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -16,25 +16,26 @@ namespace NzbDrone.Core.Providers private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly string[] mediaExtentions = new[] { ".mkv", ".avi", ".wmv", ".mp4", ".mpg", ".mpeg", ".xvid", ".flv", ".mov", ".rm", ".rmvb", ".divx", ".dvr-ms", ".ts", ".ogm", ".m4v", ".strm" }; private readonly DiskProvider _diskProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly MediaFileProvider _mediaFileProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly ExternalNotificationProvider _externalNotificationProvider; private readonly DownloadProvider _downloadProvider; private readonly SignalRProvider _signalRProvider; private readonly ConfigProvider _configProvider; private readonly RecycleBinProvider _recycleBinProvider; private readonly MediaInfoProvider _mediaInfoProvider; + private readonly ISeriesRepository _seriesRepository; - public DiskScanProvider(DiskProvider diskProvider, EpisodeProvider episodeProvider, - SeriesProvider seriesProvider, MediaFileProvider mediaFileProvider, + public DiskScanProvider(DiskProvider diskProvider, EpisodeService episodeService, + ISeriesService seriesService, MediaFileProvider mediaFileProvider, ExternalNotificationProvider externalNotificationProvider, DownloadProvider downloadProvider, SignalRProvider signalRProvider, ConfigProvider configProvider, - RecycleBinProvider recycleBinProvider, MediaInfoProvider mediaInfoProvider) + RecycleBinProvider recycleBinProvider, MediaInfoProvider mediaInfoProvider, ISeriesRepository seriesRepository) { _diskProvider = diskProvider; - _episodeProvider = episodeProvider; - _seriesProvider = seriesProvider; + _episodeService = episodeService; + _seriesService = seriesService; _mediaFileProvider = mediaFileProvider; _externalNotificationProvider = externalNotificationProvider; _downloadProvider = downloadProvider; @@ -42,6 +43,7 @@ namespace NzbDrone.Core.Providers _configProvider = configProvider; _recycleBinProvider = recycleBinProvider; _mediaInfoProvider = mediaInfoProvider; + _seriesRepository = seriesRepository; } public DiskScanProvider() @@ -72,7 +74,7 @@ namespace NzbDrone.Core.Providers return new List(); } - if (_episodeProvider.GetEpisodeBySeries(series.SeriesId).Count == 0) + if (_episodeService.GetEpisodeBySeries(series.SeriesId).Count == 0) { Logger.Debug("Series {0} has no episodes. skipping", series.Title); return new List(); @@ -97,7 +99,7 @@ namespace NzbDrone.Core.Providers //Todo: Move the episode linking to here, instead of import (or rename import) series.LastDiskSync = DateTime.Now; - _seriesProvider.UpdateSeries(series); + _seriesRepository.Update(series); return importedFiles; } @@ -120,7 +122,7 @@ namespace NzbDrone.Core.Providers var size = _diskProvider.GetSize(filePath); var runTime = _mediaInfoProvider.GetRunTime(filePath); - if(series.IsDaily || parseResult.SeasonNumber > 0) + if (series.SeriesType == SeriesType.Daily || parseResult.SeasonNumber > 0) { if (size < Constants.IgnoreFileSize && runTime < 180) { @@ -135,7 +137,7 @@ namespace NzbDrone.Core.Providers parseResult.SeriesTitle = series.Title; //replaces the nasty path as title to help with logging parseResult.Series = series; - var episodes = _episodeProvider.GetEpisodesByParseResult(parseResult); + var episodes = _episodeService.GetEpisodesByParseResult(parseResult); if (episodes.Count <= 0) { @@ -171,14 +173,14 @@ namespace NzbDrone.Core.Providers //Todo: We shouldn't actually import the file until we confirm its the only one we want. //Todo: Separate episodeFile creation from importing (pass file to import to import) - var fileId = _mediaFileProvider.Add(episodeFile); + _mediaFileProvider.Add(episodeFile); //Link file to all episodes foreach (var ep in episodes) { - ep.EpisodeFileId = fileId; + ep.EpisodeFile = episodeFile; ep.PostDownloadStatus = PostDownloadStatusType.NoError; - _episodeProvider.UpdateEpisode(ep); + _episodeService.UpdateEpisode(ep); Logger.Debug("Linking [{0}] > [{1}]", filePath, ep); } @@ -190,8 +192,8 @@ namespace NzbDrone.Core.Providers if (episodeFile == null) throw new ArgumentNullException("episodeFile"); - var series = _seriesProvider.GetSeries(episodeFile.SeriesId); - var episodes = _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId); + var series = _seriesRepository.Get(episodeFile.SeriesId); + var episodes = _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId); string newFileName = _mediaFileProvider.GetNewFilename(episodes, series, episodeFile.Quality, episodeFile.Proper, episodeFile); var newFile = _mediaFileProvider.CalculateFilePath(series, episodes.First().SeasonNumber, newFileName, Path.GetExtension(episodeFile.Path)); @@ -202,7 +204,7 @@ namespace NzbDrone.Core.Providers return null; } - if(!_diskProvider.FileExists(episodeFile.Path)) + if (!_diskProvider.FileExists(episodeFile.Path)) { Logger.Error("Episode file path does not exist, {0}", episodeFile.Path); return null; @@ -229,7 +231,7 @@ namespace NzbDrone.Core.Providers var parseResult = Parser.ParsePath(episodeFile.Path); parseResult.Series = series; - parseResult.Quality = new QualityModel{ Quality = episodeFile.Quality, Proper = episodeFile.Proper }; + parseResult.Quality = new QualityModel { Quality = episodeFile.Quality, Proper = episodeFile.Proper }; parseResult.Episodes = episodes; var message = _downloadProvider.GetDownloadTitle(parseResult); @@ -237,9 +239,9 @@ namespace NzbDrone.Core.Providers if (newDownload) { _externalNotificationProvider.OnDownload(message, series); - - foreach(var episode in episodes) - _signalRProvider.UpdateEpisodeStatus(episode.EpisodeId, EpisodeStatusType.Ready, parseResult.Quality); + + foreach (var episode in episodes) + _signalRProvider.UpdateEpisodeStatus(episode.OID, EpisodeStatusType.Ready, parseResult.Quality); } else { @@ -259,19 +261,19 @@ namespace NzbDrone.Core.Providers { try { - if(!_diskProvider.FileExists(episodeFile.Path)) + if (!_diskProvider.FileExists(episodeFile.Path)) { Logger.Trace("File [{0}] no longer exists on disk. removing from db", episodeFile.Path); //Set the EpisodeFileId for each episode attached to this file to 0 - foreach(var episode in _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId)) + foreach (var episode in _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId)) { - Logger.Trace("Setting EpisodeFileId for Episode: [{0}] to 0", episode.EpisodeId); - episode.EpisodeFileId = 0; + Logger.Trace("Detaching episode {0} from file.", episode.OID); + episode.EpisodeFile = null; episode.Ignored = _configProvider.AutoIgnorePreviouslyDownloadedEpisodes; episode.GrabDate = null; episode.PostDownloadStatus = PostDownloadStatusType.Unknown; - _episodeProvider.UpdateEpisode(episode); + _episodeService.UpdateEpisode(episode); } //Delete it from the DB @@ -293,7 +295,7 @@ namespace NzbDrone.Core.Providers var filesOnDisk = GetVideoFiles(path); - foreach(var file in filesOnDisk) + foreach (var file in filesOnDisk) { try { diff --git a/NzbDrone.Core/Providers/DownloadClients/NzbgetProvider.cs b/NzbDrone.Core/Providers/DownloadClients/NzbgetProvider.cs index 70c80358f..5347a73e0 100644 --- a/NzbDrone.Core/Providers/DownloadClients/NzbgetProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/NzbgetProvider.cs @@ -11,6 +11,7 @@ using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Model.Nzbget; using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Tv; namespace NzbDrone.Core.Providers.DownloadClients { @@ -41,7 +42,7 @@ namespace NzbDrone.Core.Providers.DownloadClients var matchingTitleWithQuality = matchigTitle.Where(q => q.ParseResult.Quality >= newParseResult.Quality); - if (newParseResult.Series.IsDaily) + if (newParseResult.Series.SeriesType == SeriesType.Daily) { return matchingTitleWithQuality.Any(q => q.ParseResult.AirDate.Value.Date == newParseResult.AirDate.Value.Date); } diff --git a/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs b/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs index 30d0b392e..d7c74502c 100644 --- a/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs +++ b/NzbDrone.Core/Providers/DownloadClients/SabProvider.cs @@ -11,6 +11,7 @@ using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Model.Sabnzbd; using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Tv; namespace NzbDrone.Core.Providers.DownloadClients { @@ -40,7 +41,7 @@ namespace NzbDrone.Core.Providers.DownloadClients var matchingTitleWithQuality = matchigTitle.Where(q => q.ParseResult.Quality >= newParseResult.Quality); - if (newParseResult.Series.IsDaily) + if (newParseResult.Series.SeriesType == SeriesType.Daily) { return matchingTitleWithQuality.Any(q => q.ParseResult.AirDate.Value.Date == newParseResult.AirDate.Value.Date); } diff --git a/NzbDrone.Core/Providers/DownloadProvider.cs b/NzbDrone.Core/Providers/DownloadProvider.cs index a8edd1ce6..0dfa6373d 100644 --- a/NzbDrone.Core/Providers/DownloadProvider.cs +++ b/NzbDrone.Core/Providers/DownloadProvider.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Providers { private readonly SabProvider _sabProvider; private readonly HistoryProvider _historyProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private readonly ExternalNotificationProvider _externalNotificationProvider; private readonly ConfigProvider _configProvider; private readonly BlackholeProvider _blackholeProvider; @@ -25,14 +25,14 @@ namespace NzbDrone.Core.Providers private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public DownloadProvider(SabProvider sabProvider, HistoryProvider historyProvider, - EpisodeProvider episodeProvider, ExternalNotificationProvider externalNotificationProvider, + EpisodeService episodeService, ExternalNotificationProvider externalNotificationProvider, ConfigProvider configProvider, BlackholeProvider blackholeProvider, SignalRProvider signalRProvider, PneumaticProvider pneumaticProvider, NzbgetProvider nzbgetProvider) { _sabProvider = sabProvider; _historyProvider = historyProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; _externalNotificationProvider = externalNotificationProvider; _configProvider = configProvider; _blackholeProvider = blackholeProvider; @@ -66,16 +66,16 @@ namespace NzbDrone.Core.Providers IsProper = parseResult.Quality.Proper, Quality = parseResult.Quality.Quality, NzbTitle = parseResult.OriginalString, - EpisodeId = episode.EpisodeId, + EpisodeId = episode.OID, SeriesId = episode.SeriesId, NzbInfoUrl = parseResult.NzbInfoUrl, ReleaseGroup = parseResult.ReleaseGroup, }; _historyProvider.Add(history); - _episodeProvider.MarkEpisodeAsFetched(episode.EpisodeId); + _episodeService.MarkEpisodeAsFetched(episode.OID); - _signalRProvider.UpdateEpisodeStatus(episode.EpisodeId, EpisodeStatusType.Downloading, null); + _signalRProvider.UpdateEpisodeStatus(episode.OID, EpisodeStatusType.Downloading, null); } _externalNotificationProvider.OnGrab(downloadTitle); @@ -124,7 +124,7 @@ namespace NzbDrone.Core.Providers return seasonResult; } - if (parseResult.Series.IsDaily) + if (parseResult.Series.SeriesType == SeriesType.Daily) { var dailyResult = String.Format("{0} - {1:yyyy-MM-dd} - {2} [{3}]", seriesTitle, parseResult.AirDate, parseResult.Episodes.First().Title, parseResult.Quality.Quality); diff --git a/NzbDrone.Core/Providers/MediaFileProvider.cs b/NzbDrone.Core/Providers/MediaFileProvider.cs index 5cb7b8f1b..bdbcf254c 100644 --- a/NzbDrone.Core/Providers/MediaFileProvider.cs +++ b/NzbDrone.Core/Providers/MediaFileProvider.cs @@ -18,11 +18,11 @@ namespace NzbDrone.Core.Providers private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly ConfigProvider _configProvider; private readonly IDatabase _database; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; - public MediaFileProvider(EpisodeProvider episodeProvider, ConfigProvider configProvider, IDatabase database) + public MediaFileProvider(EpisodeService episodeService, ConfigProvider configProvider, IDatabase database) { - _episodeProvider = episodeProvider; + _episodeService = episodeService; _configProvider = configProvider; _database = database; } @@ -78,7 +78,7 @@ namespace NzbDrone.Core.Providers public virtual Tuple GetEpisodeFilesCount(int seriesId) { - var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId).ToList(); + var allEpisodes = _episodeService.GetEpisodeBySeries(seriesId).ToList(); var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate != null && e.AirDate <= DateTime.Today).ToList(); var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0).ToList(); @@ -173,7 +173,7 @@ namespace NzbDrone.Core.Providers result += series.Title + separatorStyle.Pattern; } - if(!series.IsDaily) + if (series.SeriesType == SeriesType.Standard) { result += numberStyle.Pattern.Replace("%0e", String.Format("{0:00}", sortedEpisodes.First().EpisodeNumber)); diff --git a/NzbDrone.Core/Providers/Metadata/MetadataBase.cs b/NzbDrone.Core/Providers/Metadata/MetadataBase.cs index 1d685897a..6892d93b8 100644 --- a/NzbDrone.Core/Providers/Metadata/MetadataBase.cs +++ b/NzbDrone.Core/Providers/Metadata/MetadataBase.cs @@ -15,15 +15,15 @@ namespace NzbDrone.Core.Providers.Metadata protected readonly ConfigProvider _configProvider; protected readonly DiskProvider _diskProvider; protected readonly BannerProvider _bannerProvider; - protected readonly EpisodeProvider _episodeProvider; + protected readonly EpisodeService _episodeService; protected MetadataBase(ConfigProvider configProvider, DiskProvider diskProvider, - BannerProvider bannerProvider, EpisodeProvider episodeProvider) + BannerProvider bannerProvider, EpisodeService episodeService) { _configProvider = configProvider; _diskProvider = diskProvider; _bannerProvider = bannerProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; _logger = LogManager.GetLogger(GetType().ToString()); } diff --git a/NzbDrone.Core/Providers/Metadata/Xbmc.cs b/NzbDrone.Core/Providers/Metadata/Xbmc.cs index 034ac15bd..14e51c56a 100644 --- a/NzbDrone.Core/Providers/Metadata/Xbmc.cs +++ b/NzbDrone.Core/Providers/Metadata/Xbmc.cs @@ -17,8 +17,8 @@ namespace NzbDrone.Core.Providers.Metadata public class Xbmc : MetadataBase { public Xbmc(ConfigProvider configProvider, DiskProvider diskProvider, - BannerProvider bannerProvider, EpisodeProvider episodeProvider) - : base(configProvider, diskProvider, bannerProvider, episodeProvider) + BannerProvider bannerProvider, EpisodeService episodeService) + : base(configProvider, diskProvider, bannerProvider, episodeService) { } @@ -113,7 +113,7 @@ namespace NzbDrone.Core.Providers.Metadata public override void CreateForEpisodeFile(EpisodeFile episodeFile, TvdbSeries tvDbSeries) { //Create filename.tbn and filename.nfo - var episodes = _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId); + var episodes = _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId); if (!episodes.Any()) { diff --git a/NzbDrone.Core/Providers/MisnamedProvider.cs b/NzbDrone.Core/Providers/MisnamedProvider.cs index 4d529f430..8fc3d9576 100644 --- a/NzbDrone.Core/Providers/MisnamedProvider.cs +++ b/NzbDrone.Core/Providers/MisnamedProvider.cs @@ -14,21 +14,21 @@ namespace NzbDrone.Core.Providers public class MisnamedProvider { private readonly MediaFileProvider _mediaFileProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - public MisnamedProvider(MediaFileProvider mediaFileProvider, EpisodeProvider episodeProvider) + public MisnamedProvider(MediaFileProvider mediaFileProvider, EpisodeService episodeService) { _mediaFileProvider = mediaFileProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; } public virtual List MisnamedFiles(int pageNumber, int pageSize, out int totalItems) { var misnamedFiles = new List(); - var episodesWithFiles = _episodeProvider.EpisodesWithFiles().GroupBy(e => e.EpisodeFileId).ToList(); + var episodesWithFiles = _episodeService.EpisodesWithFiles().GroupBy(e => e.EpisodeFileId).ToList(); totalItems = episodesWithFiles.Count(); var stopwatch = new Stopwatch(); stopwatch.Start(); diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs index 6f8ae3cb0..24adcbbc4 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -16,16 +16,18 @@ namespace NzbDrone.Core.Providers private static readonly Regex StatusRegex = new Regex(@"^_[\w_]*_", RegexOptions.Compiled); private readonly DiskProvider _diskProvider; private readonly DiskScanProvider _diskScanProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly MetadataProvider _metadataProvider; + private readonly ISeriesRepository _seriesRepository; public PostDownloadProvider(DiskProvider diskProvider, DiskScanProvider diskScanProvider, - SeriesProvider seriesProvider, MetadataProvider metadataProvider) + ISeriesService seriesService, MetadataProvider metadataProvider,ISeriesRepository seriesRepository) { _diskProvider = diskProvider; _diskScanProvider = diskScanProvider; - _seriesProvider = seriesProvider; + _seriesService = seriesService; _metadataProvider = metadataProvider; + _seriesRepository = seriesRepository; } public PostDownloadProvider() @@ -38,7 +40,7 @@ namespace NzbDrone.Core.Providers { try { - if (!_seriesProvider.SeriesPathExists(subfolder)) + if (!_seriesRepository.SeriesPathExists(subfolder)) { ProcessDownload(new DirectoryInfo(subfolder)); } @@ -77,7 +79,7 @@ namespace NzbDrone.Core.Providers } string seriesName = Parser.ParseSeriesName(RemoveStatusFromFolderName(subfolderInfo.Name)); - var series = _seriesProvider.FindSeries(seriesName); + var series = _seriesRepository.GetByTitle(seriesName); if (series == null) { @@ -147,7 +149,7 @@ namespace NzbDrone.Core.Providers } var seriesName = Parser.ParseSeriesName(Path.GetFileNameWithoutExtension(videoFile)); - var series = _seriesProvider.FindSeries(seriesName); + var series = _seriesRepository.GetByTitle(seriesName); if (series == null) { diff --git a/NzbDrone.Core/Providers/Search/DailyEpisodeSearch.cs b/NzbDrone.Core/Providers/Search/DailyEpisodeSearch.cs index f2c736179..52d0a45fe 100644 --- a/NzbDrone.Core/Providers/Search/DailyEpisodeSearch.cs +++ b/NzbDrone.Core/Providers/Search/DailyEpisodeSearch.cs @@ -15,14 +15,16 @@ namespace NzbDrone.Core.Providers.Search { public class DailyEpisodeSearch : SearchBase { + private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public DailyEpisodeSearch(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, DownloadProvider downloadProvider, IndexerProvider indexerProvider, + public DailyEpisodeSearch(ISeriesService seriesService, EpisodeService episodeService, DownloadProvider downloadProvider, IndexerProvider indexerProvider, SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification, - SearchHistoryProvider searchHistoryProvider) - : base(seriesProvider, episodeProvider, downloadProvider, indexerProvider, sceneMappingProvider, - allowedDownloadSpecification, searchHistoryProvider) - { + SearchHistoryProvider searchHistoryProvider, ISeriesRepository seriesRepository) + : base(seriesService, seriesRepository, episodeService, downloadProvider, indexerProvider, sceneMappingProvider, + allowedDownloadSpecification, searchHistoryProvider) + { + _seriesRepository = seriesRepository; } public DailyEpisodeSearch() diff --git a/NzbDrone.Core/Providers/Search/EpisodeSearch.cs b/NzbDrone.Core/Providers/Search/EpisodeSearch.cs index 3581b22f3..787bbd036 100644 --- a/NzbDrone.Core/Providers/Search/EpisodeSearch.cs +++ b/NzbDrone.Core/Providers/Search/EpisodeSearch.cs @@ -17,10 +17,10 @@ namespace NzbDrone.Core.Providers.Search { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public EpisodeSearch(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, DownloadProvider downloadProvider, IndexerProvider indexerProvider, + public EpisodeSearch(ISeriesService seriesService, EpisodeService episodeService, DownloadProvider downloadProvider, IndexerProvider indexerProvider, SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification, - SearchHistoryProvider searchHistoryProvider) - : base(seriesProvider, episodeProvider, downloadProvider, indexerProvider, sceneMappingProvider, + SearchHistoryProvider searchHistoryProvider, ISeriesRepository seriesRepository) + : base(seriesService,seriesRepository, episodeService, downloadProvider, indexerProvider, sceneMappingProvider, allowedDownloadSpecification, searchHistoryProvider) { } diff --git a/NzbDrone.Core/Providers/Search/PartialSeasonSearch.cs b/NzbDrone.Core/Providers/Search/PartialSeasonSearch.cs index 327567fb8..b90931d05 100644 --- a/NzbDrone.Core/Providers/Search/PartialSeasonSearch.cs +++ b/NzbDrone.Core/Providers/Search/PartialSeasonSearch.cs @@ -17,10 +17,10 @@ namespace NzbDrone.Core.Providers.Search { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public PartialSeasonSearch(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, DownloadProvider downloadProvider, IndexerProvider indexerProvider, + public PartialSeasonSearch(ISeriesService seriesService, EpisodeService episodeService, DownloadProvider downloadProvider, IndexerProvider indexerProvider, SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification, - SearchHistoryProvider searchHistoryProvider) - : base(seriesProvider, episodeProvider, downloadProvider, indexerProvider, sceneMappingProvider, + SearchHistoryProvider searchHistoryProvider,ISeriesRepository seriesRepository) + : base(seriesService, seriesRepository, episodeService, downloadProvider, indexerProvider, sceneMappingProvider, allowedDownloadSpecification, searchHistoryProvider) { } diff --git a/NzbDrone.Core/Providers/Search/SearchBase.cs b/NzbDrone.Core/Providers/Search/SearchBase.cs index 59fc7ab33..b7ede3587 100644 --- a/NzbDrone.Core/Providers/Search/SearchBase.cs +++ b/NzbDrone.Core/Providers/Search/SearchBase.cs @@ -1,22 +1,21 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Text.RegularExpressions; using NLog; using NzbDrone.Core.Tv; using NzbDrone.Core.Model; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Search; namespace NzbDrone.Core.Providers.Search { public abstract class SearchBase { - protected readonly SeriesProvider _seriesProvider; - protected readonly EpisodeProvider _episodeProvider; + protected readonly ISeriesService _seriesService; + private readonly ISeriesRepository _seriesRepository; + protected readonly EpisodeService _episodeService; protected readonly DownloadProvider _downloadProvider; protected readonly IndexerProvider _indexerProvider; protected readonly SceneMappingProvider _sceneMappingProvider; @@ -25,13 +24,14 @@ namespace NzbDrone.Core.Providers.Search private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - protected SearchBase(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, DownloadProvider downloadProvider, + protected SearchBase(ISeriesService seriesService,ISeriesRepository seriesRepository, EpisodeService episodeService, DownloadProvider downloadProvider, IndexerProvider indexerProvider, SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification, SearchHistoryProvider searchHistoryProvider) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _seriesService = seriesService; + _seriesRepository = seriesRepository; + _episodeService = episodeService; _downloadProvider = downloadProvider; _indexerProvider = indexerProvider; _sceneMappingProvider = sceneMappingProvider; @@ -105,7 +105,7 @@ namespace NzbDrone.Core.Providers.Search items.Add(item); logger.Trace("Analysing report " + episodeParseResult); - episodeParseResult.Series = _seriesProvider.FindSeries(episodeParseResult.CleanTitle); + episodeParseResult.Series = _seriesRepository.GetByTitle(episodeParseResult.CleanTitle); if(episodeParseResult.Series == null || episodeParseResult.Series.SeriesId != series.SeriesId) { @@ -113,9 +113,9 @@ namespace NzbDrone.Core.Providers.Search continue; } - episodeParseResult.Episodes = _episodeProvider.GetEpisodesByParseResult(episodeParseResult); + episodeParseResult.Episodes = _episodeService.GetEpisodesByParseResult(episodeParseResult); - if (searchResult.Successes.Intersect(episodeParseResult.Episodes.Select(e => e.EpisodeId)).Any()) + if (searchResult.Successes.Intersect(episodeParseResult.Episodes.Select(e => e.OID)).Any()) { item.SearchError = ReportRejectionType.Skipped; continue; @@ -130,7 +130,7 @@ namespace NzbDrone.Core.Providers.Search if(item.SearchError == ReportRejectionType.None) { if(DownloadReport(notification, episodeParseResult, item)) - searchResult.Successes.AddRange(episodeParseResult.Episodes.Select(e => e.EpisodeId)); + searchResult.Successes.AddRange(episodeParseResult.Episodes.Select(e => e.OID)); } } catch(Exception e) diff --git a/NzbDrone.Core/Providers/SearchHistoryProvider.cs b/NzbDrone.Core/Providers/SearchHistoryProvider.cs index d7fdc816b..c6330eff5 100644 --- a/NzbDrone.Core/Providers/SearchHistoryProvider.cs +++ b/NzbDrone.Core/Providers/SearchHistoryProvider.cs @@ -13,19 +13,21 @@ namespace NzbDrone.Core.Providers public class SearchHistoryProvider { private readonly IDatabase _database; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesService _seriesService; private readonly DownloadProvider _downloadProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public SearchHistoryProvider(IDatabase database, SeriesProvider seriesProvider, - DownloadProvider downloadProvider, EpisodeProvider episodeProvider) + public SearchHistoryProvider(IDatabase database, ISeriesService seriesService, + DownloadProvider downloadProvider, EpisodeService episodeService, ISeriesRepository seriesRepository) { _database = database; - _seriesProvider = seriesProvider; + _seriesService = seriesService; _downloadProvider = downloadProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; + _seriesRepository = seriesRepository; } public SearchHistoryProvider() @@ -105,13 +107,13 @@ namespace NzbDrone.Core.Providers var item = _database.Single(itemId); logger.Info("Starting Force Download of: {0}", item.ReportTitle); var searchResult = _database.Single(item.SearchHistoryId); - var series = _seriesProvider.GetSeries(searchResult.SeriesId); + var series = _seriesRepository.Get(searchResult.SeriesId); var parseResult = Parser.ParseTitle(item.ReportTitle); parseResult.NzbUrl = item.NzbUrl; parseResult.Series = series; parseResult.Indexer = item.Indexer; - parseResult.Episodes = _episodeProvider.GetEpisodesByParseResult(parseResult); + parseResult.Episodes = _episodeService.GetEpisodesByParseResult(parseResult); parseResult.SceneSource = true; logger.Info("Forcing Download of: {0}", item.ReportTitle); diff --git a/NzbDrone.Core/Providers/SearchProvider.cs b/NzbDrone.Core/Providers/SearchProvider.cs index a1256db7e..09fb6768c 100644 --- a/NzbDrone.Core/Providers/SearchProvider.cs +++ b/NzbDrone.Core/Providers/SearchProvider.cs @@ -16,18 +16,20 @@ namespace NzbDrone.Core.Providers { public class SearchProvider { - private readonly SeriesProvider _seriesProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly ISeriesService _seriesService; + private readonly EpisodeService _episodeService; private readonly PartialSeasonSearch _partialSeasonSearch; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public SearchProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, - PartialSeasonSearch partialSeasonSearch) + public SearchProvider(ISeriesService seriesService, EpisodeService episodeService, + PartialSeasonSearch partialSeasonSearch,ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _seriesService = seriesService; + _episodeService = episodeService; _partialSeasonSearch = partialSeasonSearch; + _seriesRepository = seriesRepository; } public SearchProvider() @@ -36,7 +38,7 @@ namespace NzbDrone.Core.Providers public virtual List SeasonSearch(ProgressNotification notification, int seriesId, int seasonNumber) { - var series = _seriesProvider.GetSeries(seriesId); + var series = _seriesRepository.Get(seriesId); if (series == null) { @@ -44,14 +46,14 @@ namespace NzbDrone.Core.Providers return new List(); } - if (series.IsDaily) + if (series.SeriesType == SeriesType.Daily) { logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); - var episodes = _episodeProvider.GetEpisodesBySeason(seriesId, seasonNumber); + var episodes = _episodeService.GetEpisodesBySeason(seriesId, seasonNumber); if (episodes == null || episodes.Count == 0) { @@ -65,7 +67,7 @@ namespace NzbDrone.Core.Providers public virtual List PartialSeasonSearch(ProgressNotification notification, int seriesId, int seasonNumber) { - var series = _seriesProvider.GetSeries(seriesId); + var series = _seriesRepository.Get(seriesId); if (series == null) { @@ -73,13 +75,13 @@ namespace NzbDrone.Core.Providers return new List(); } - if (series.IsDaily) + if (series.SeriesType == SeriesType.Daily) { logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } - var episodes = _episodeProvider.GetEpisodesBySeason(seriesId, seasonNumber); + var episodes = _episodeService.GetEpisodesBySeason(seriesId, seasonNumber); if (episodes == null || episodes.Count == 0) { diff --git a/NzbDrone.Core/Providers/TvRageMappingProvider.cs b/NzbDrone.Core/Providers/TvRageMappingProvider.cs index aae8fde35..6b8c76ca8 100644 --- a/NzbDrone.Core/Providers/TvRageMappingProvider.cs +++ b/NzbDrone.Core/Providers/TvRageMappingProvider.cs @@ -13,16 +13,16 @@ namespace NzbDrone.Core.Providers { private readonly SceneMappingProvider _sceneMappingProvider; private readonly TvRageProvider _tvRageProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly EpisodeService _episodeService; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public TvRageMappingProvider(SceneMappingProvider sceneMappingProvider, - TvRageProvider tvRageProvider, EpisodeProvider episodeProvider) + TvRageProvider tvRageProvider, EpisodeService episodeService) { _sceneMappingProvider = sceneMappingProvider; _tvRageProvider = tvRageProvider; - _episodeProvider = episodeProvider; + _episodeService = episodeService; } public TvRageMappingProvider() @@ -31,7 +31,7 @@ namespace NzbDrone.Core.Providers public Series FindMatchingTvRageSeries(Series series) { - var firstEpisode = _episodeProvider.GetEpisode(series.SeriesId, 1, 1); + var firstEpisode = _episodeService.GetEpisode(series.SeriesId, 1, 1); var cleanName = _sceneMappingProvider.GetCleanName(series.SeriesId); var results = _tvRageProvider.SearchSeries(series.Title); diff --git a/NzbDrone.Core/Providers/XemProvider.cs b/NzbDrone.Core/Providers/XemProvider.cs index 0f5489134..cfcd8cf79 100644 --- a/NzbDrone.Core/Providers/XemProvider.cs +++ b/NzbDrone.Core/Providers/XemProvider.cs @@ -10,18 +10,20 @@ namespace NzbDrone.Core.Providers { public class XemProvider { - private readonly SeriesProvider _seriesProvider; - private readonly EpisodeProvider _episodeProvider; + private readonly ISeriesService _seriesService; + private readonly EpisodeService _episodeService; private readonly XemCommunicationProvider _xemCommunicationProvider; + private readonly ISeriesRepository _seriesRepository; private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); - public XemProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, - XemCommunicationProvider xemCommunicationProvider) + public XemProvider(ISeriesService seriesService, EpisodeService episodeService, + XemCommunicationProvider xemCommunicationProvider,ISeriesRepository seriesRepository) { - _seriesProvider = seriesProvider; - _episodeProvider = episodeProvider; + _seriesService = seriesService; + _episodeService = episodeService; _xemCommunicationProvider = xemCommunicationProvider; + _seriesRepository = seriesRepository; } public XemProvider() @@ -34,7 +36,7 @@ namespace NzbDrone.Core.Providers try { var ids = _xemCommunicationProvider.GetXemSeriesIds(); - var series = _seriesProvider.GetAllSeries(); + var series = _seriesRepository.All(); var wantedSeries = series.Where(s => ids.Contains(s.SeriesId)).ToList(); foreach(var ser in wantedSeries) @@ -62,7 +64,7 @@ namespace NzbDrone.Core.Providers return; } - var series = _seriesProvider.GetSeries(seriesId); + var series = _seriesRepository.Get(seriesId); if (series == null) { @@ -87,7 +89,7 @@ namespace NzbDrone.Core.Providers return; } - var episodes = _episodeProvider.GetEpisodeBySeries(series.SeriesId); + var episodes = _episodeService.GetEpisodeBySeries(series.SeriesId); foreach (var mapping in mappings) { @@ -108,11 +110,11 @@ namespace NzbDrone.Core.Providers } _logger.Trace("Committing scene numbering mappings to database for: {0}", series.Title); - _episodeProvider.UpdateEpisodes(episodesToUpdate); + _episodeService.UpdateEpisodes(episodesToUpdate); _logger.Trace("Setting UseSceneMapping for {0}", series.Title); series.UseSceneNumbering = true; - _seriesProvider.UpdateSeries(series); + _seriesRepository.Update(series); } catch (Exception ex) diff --git a/NzbDrone.Core/RootFolders/RootFolderService.cs b/NzbDrone.Core/RootFolders/RootFolderService.cs index 3fc33386d..64a91dff9 100644 --- a/NzbDrone.Core/RootFolders/RootFolderService.cs +++ b/NzbDrone.Core/RootFolders/RootFolderService.cs @@ -24,18 +24,20 @@ namespace NzbDrone.Core.RootFolders private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly IBasicRepository _rootFolderRepository; private readonly DiskProvider _diskProvider; - private readonly SeriesProvider _seriesProvider; + private readonly ISeriesRepository _seriesRepository; + private readonly ISeriesService _seriesService; - public RootFolderService(IBasicRepository rootFolderRepository, SeriesProvider seriesProvider, DiskProvider diskProvider) + public RootFolderService(IBasicRepository rootFolderRepository, ISeriesService seriesService, DiskProvider diskProvider,ISeriesRepository seriesRepository) { _rootFolderRepository = rootFolderRepository; _diskProvider = diskProvider; - _seriesProvider = seriesProvider; + _seriesRepository = seriesRepository; + _seriesService = seriesService; } public virtual List All() { - var rootFolders = _rootFolderRepository.All(); + var rootFolders = _rootFolderRepository.All().ToList(); rootFolders.ForEach(folder => { @@ -60,7 +62,7 @@ namespace NzbDrone.Core.RootFolders if (All().Exists(r => DiskProvider.PathEquals(r.Path, rootFolder.Path))) throw new InvalidOperationException("Root directory already exist."); - _rootFolderRepository.Add(rootFolder); + _rootFolderRepository.Insert(rootFolder); rootFolder.FreeSpace = _diskProvider.FreeDiskSpace(rootFolder.Path); rootFolder.UnmappedFolders = GetUnmappedFolders(rootFolder.Path); @@ -88,7 +90,7 @@ namespace NzbDrone.Core.RootFolders foreach (string seriesFolder in _diskProvider.GetDirectories(path)) { - if (!_seriesProvider.SeriesPathExists(seriesFolder)) + if (!_seriesRepository.SeriesPathExists(seriesFolder)) { var di = new DirectoryInfo(seriesFolder.Normalize()); results.Add(new UnmappedFolder{ Name = di.Name, Path = di.FullName }); diff --git a/NzbDrone.Core/Tv/Episode.cs b/NzbDrone.Core/Tv/Episode.cs index 9a47bde98..3e3b28f84 100644 --- a/NzbDrone.Core/Tv/Episode.cs +++ b/NzbDrone.Core/Tv/Episode.cs @@ -1,17 +1,15 @@ using System.Linq; using System; +using NzbDrone.Core.Datastore; using NzbDrone.Core.Model; namespace NzbDrone.Core.Tv { - public class Episode + public class Episode : ModelBase { - public int EpisodeId { get; set; } - public int? TvDbEpisodeId { get; set; } public int SeriesId { get; set; } - public int EpisodeFileId { get; set; } public int SeasonNumber { get; set; } public int EpisodeNumber { get; set; } public string Title { get; set; } @@ -28,6 +26,23 @@ namespace NzbDrone.Core.Tv //Todo: This should be UTC public DateTime? GrabDate { get; set; } + + public bool HasFile + { + get { return EpisodeFile != null; } + } + + public int EpisodeFileId + { + get + { + if (!HasFile) return 0; + return EpisodeFile.EpisodeFileId; + } + } + + + public EpisodeStatusType Status { get @@ -67,7 +82,7 @@ namespace NzbDrone.Core.Tv { string seriesTitle = Series == null ? "[NULL]" : Series.Title; - if (Series != null && Series.IsDaily && AirDate.HasValue) + if (Series != null && Series.SeriesType == SeriesType.Daily && AirDate.HasValue) return string.Format("{0} - {1:yyyy-MM-dd}", seriesTitle, AirDate.Value); return string.Format("{0} - S{1:00}E{2:00}", seriesTitle, SeasonNumber, EpisodeNumber); diff --git a/NzbDrone.Core/Tv/EpisodeProvider.cs b/NzbDrone.Core/Tv/EpisodeProvider.cs deleted file mode 100644 index 9433d3ca6..000000000 --- a/NzbDrone.Core/Tv/EpisodeProvider.cs +++ /dev/null @@ -1,476 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using NLog; -using NzbDrone.Core.Model; -using NzbDrone.Core.Providers; -using PetaPoco; -using TvdbLib.Data; - -namespace NzbDrone.Core.Tv -{ - public class EpisodeProvider - { - - private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - - private readonly TvDbProvider _tvDbProvider; - private readonly SeasonProvider _seasonProvider; - private readonly IDatabase _database; - - public EpisodeProvider(IDatabase database, TvDbProvider tvDbProviderProvider, - SeasonProvider seasonProvider) - { - _tvDbProvider = tvDbProviderProvider; - _seasonProvider = seasonProvider; - _database = database; - } - - public EpisodeProvider() - { - } - - public virtual void AddEpisode(Episode episode) - { - //If Season is ignored ignore this episode - episode.Ignored = _seasonProvider.IsIgnored(episode.SeriesId, episode.SeasonNumber); - - _database.Insert(episode); - } - - public virtual Episode GetEpisode(long id) - { - var episode = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE EpisodeId = @0", id).Single(); - - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - - return episode; - } - - public virtual Episode GetEpisode(int seriesId, int seasonNumber, int episodeNumber) - { - var episode = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE Episodes.SeriesId = @0 AND Episodes.SeasonNumber = @1 AND Episodes.EpisodeNumber = @2", seriesId, seasonNumber, episodeNumber).SingleOrDefault(); - - if (episode == null) - return null; - - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - - return episode; - } - - public virtual Episode GetEpisode(int seriesId, DateTime date) - { - var episode = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE Episodes.SeriesId = @0 AND AirDate = @1", seriesId, date.Date).SingleOrDefault(); - - if (episode == null) - return null; - - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - - return episode; - } - - public virtual IList GetEpisodeBySeries(long seriesId) - { - var episodes = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE Episodes.SeriesId = @0", seriesId); - - foreach (var episode in episodes) - { - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - } - - return episodes; - } - - public virtual IList GetEpisodesBySeason(long seriesId, int seasonNumber) - { - var episodes = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE Episodes.SeriesId = @0 AND Episodes.SeasonNumber = @1", seriesId, seasonNumber); - - foreach (var episode in episodes) - { - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - } - - return episodes; - } - - public virtual void MarkEpisodeAsFetched(int episodeId) - { - logger.Trace("Marking episode {0} as fetched.", episodeId); - _database.Execute("UPDATE Episodes SET GrabDate=@0 WHERE EpisodeId=@1", DateTime.Now, episodeId); - } - - public virtual IList GetEpisodesByParseResult(EpisodeParseResult parseResult) - { - //Disabling auto add, need to make it a lot more conservative. - var autoAddNew = false; - - var result = new List(); - - if (parseResult.AirDate.HasValue) - { - if (!parseResult.Series.IsDaily) - { - //Todo: Collect this as a Series we want to treat as a daily series, or possible parsing error - logger.Warn("Found daily-style episode for non-daily series: {0}. {1}", parseResult.Series.Title, parseResult.OriginalString); - return new List(); - } - - var episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.AirDate.Value); - - if (episodeInfo == null && autoAddNew) - { - logger.Info("Episode {0} doesn't exist in db. adding it now. {1}", parseResult, parseResult.OriginalString); - episodeInfo = new Episode - { - SeriesId = parseResult.Series.SeriesId, - AirDate = parseResult.AirDate.Value, - Title = "TBD", - Overview = String.Empty - }; - - var episodesInSeries = GetEpisodeBySeries(parseResult.Series.SeriesId); - - //Find the current season number - var maxSeasonNumber = episodesInSeries.Select(s => s.SeasonNumber).MaxOrDefault(); - - //Set the season number - episodeInfo.SeasonNumber = (maxSeasonNumber == 0) ? 1 : maxSeasonNumber; - - //Find the latest episode number - var maxEpisodeNumber = episodesInSeries - .Where(w => w.SeasonNumber == episodeInfo.SeasonNumber) - .Select(s => s.EpisodeNumber).MaxOrDefault(); - - //Set the episode number to max + 1 - episodeInfo.EpisodeNumber = maxEpisodeNumber + 1; - - AddEpisode(episodeInfo); - } - if (episodeInfo != null) - { - result.Add(episodeInfo); - parseResult.EpisodeTitle = episodeInfo.Title; - } - - return result; - } - - if (parseResult.EpisodeNumbers == null) - return result; - - //Set it to empty before looping through the episode numbers - parseResult.EpisodeTitle = String.Empty; - - foreach (var episodeNumber in parseResult.EpisodeNumbers) - { - Episode episodeInfo = null; - - if (parseResult.SceneSource && parseResult.Series.UseSceneNumbering) - episodeInfo = GetEpisodeBySceneNumbering(parseResult.Series.SeriesId, parseResult.SeasonNumber, episodeNumber); - - if (episodeInfo == null) - { - episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.SeasonNumber, episodeNumber); - if (episodeInfo == null && parseResult.AirDate != null) - { - episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.AirDate.Value); - } - } - - //if still null we should add the temp episode - if (episodeInfo == null && autoAddNew) - { - logger.Info("Episode {0} doesn't exist in db. adding it now. {1}", parseResult, parseResult.OriginalString); - episodeInfo = new Episode - { - SeriesId = parseResult.Series.SeriesId, - AirDate = DateTime.Now.Date, - EpisodeNumber = episodeNumber, - SeasonNumber = parseResult.SeasonNumber, - Title = "TBD", - Overview = String.Empty, - }; - - if (parseResult.EpisodeNumbers.Count == 1 && parseResult.EpisodeNumbers.First() == 0) - episodeInfo.Ignored = true; - - AddEpisode(episodeInfo); - } - - if (episodeInfo != null) - { - result.Add(episodeInfo); - - if (parseResult.Series.UseSceneNumbering) - { - logger.Info("Using Scene to TVDB Mapping for: {0} - Scene: {1}x{2:00} - TVDB: {3}x{4:00}", - parseResult.Series.Title, - episodeInfo.SceneSeasonNumber, - episodeInfo.SceneEpisodeNumber, - episodeInfo.SeasonNumber, - episodeInfo.EpisodeNumber); - } - - if (parseResult.EpisodeNumbers.Count == 1) - { - parseResult.EpisodeTitle = episodeInfo.Title.Trim(); - } - else - { - parseResult.EpisodeTitle = Parser.CleanupEpisodeTitle(episodeInfo.Title); - } - } - else - { - logger.Debug("Unable to find {0}", parseResult); - } - } - - return result; - } - - public virtual IList EpisodesWithoutFiles(bool includeSpecials) - { - var episodes = _database.Query(@"SELECT Episodes.*, Series.* FROM Episodes - INNER JOIN Series - ON Episodes.SeriesId = Series.SeriesId - WHERE (EpisodeFileId=0 OR EpisodeFileId=NULL) AND Ignored = 0 AND AirDate<=@0", - DateTime.Now.Date); - if (!includeSpecials) - return episodes.Where(e => e.SeasonNumber > 0).ToList(); - - return episodes.ToList(); - } - - public virtual IList GetEpisodesByFileId(int episodeFileId) - { - return _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - WHERE EpisodeFileId = @0", episodeFileId); - } - - public virtual IList EpisodesWithFiles() - { - var episodes = _database.Fetch(@"SELECT Episodes.*, Series.*, EpisodeFiles.* FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - INNER JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId"); - - return episodes; - } - - public virtual void RefreshEpisodeInfo(Series series) - { - logger.Trace("Starting episode info refresh for series: {0}", series.Title.WithDefault(series.SeriesId)); - var successCount = 0; - var failCount = 0; - - var tvdbEpisodes = _tvDbProvider.GetSeries(series.SeriesId, true) - .Episodes - .Where(episode => !string.IsNullOrWhiteSpace(episode.EpisodeName) || - (episode.FirstAired < DateTime.Now.AddDays(2) && episode.FirstAired.Year > 1900)) - .ToList(); - - var seriesEpisodes = GetEpisodeBySeries(series.SeriesId); - var updateList = new List(); - var newList = new List(); - - _seasonProvider.EnsureSeasons(series.SeriesId, tvdbEpisodes.Select(c => c.SeasonNumber).Distinct()); - - foreach (var episode in tvdbEpisodes.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) - { - try - { - logger.Trace("Updating info for [{0}] - S{1:00}E{2:00}", series.Title, episode.SeasonNumber, episode.EpisodeNumber); - - //first check using tvdbId, this should cover cases when and episode number in a season is changed - var episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.TvDbEpisodeId == episode.Id); - - //not found, try using season/episode number - if (episodeToUpdate == null) - { - episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.SeasonNumber == episode.SeasonNumber && e.EpisodeNumber == episode.EpisodeNumber); - } - - if (episodeToUpdate == null) - { - episodeToUpdate = new Episode(); - newList.Add(episodeToUpdate); - - //If it is Episode Zero Ignore it (specials, sneak peeks.) - if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) - { - episodeToUpdate.Ignored = true; - } - else - { - episodeToUpdate.Ignored = _seasonProvider.IsIgnored(series.SeriesId, episode.SeasonNumber); - } - } - else - { - updateList.Add(episodeToUpdate); - } - - if ((episodeToUpdate.EpisodeNumber != episode.EpisodeNumber || - episodeToUpdate.SeasonNumber != episode.SeasonNumber) && - episodeToUpdate.EpisodeFileId > 0) - { - logger.Info("Unlinking episode file because TheTVDB changed the epsiode number..."); - - _database.Delete(episodeToUpdate.EpisodeFileId); - episodeToUpdate.EpisodeFileId = 0; - } - - episodeToUpdate.SeriesId = series.SeriesId; - episodeToUpdate.TvDbEpisodeId = episode.Id; - episodeToUpdate.EpisodeNumber = episode.EpisodeNumber; - episodeToUpdate.SeasonNumber = episode.SeasonNumber; - episodeToUpdate.AbsoluteEpisodeNumber = episode.AbsoluteNumber; - episodeToUpdate.Title = episode.EpisodeName; - - episodeToUpdate.Overview = episode.Overview.Truncate(3500); - - if (episode.FirstAired.Year > 1900) - episodeToUpdate.AirDate = episode.FirstAired.Date; - else - episodeToUpdate.AirDate = null; - - successCount++; - } - catch (Exception e) - { - logger.FatalException(String.Format("An error has occurred while updating episode info for series {0}", series.Title), e); - failCount++; - } - } - - _database.InsertMany(newList); - _database.UpdateMany(updateList); - - if (failCount != 0) - { - logger.Info("Finished episode refresh for series: {0}. Successful: {1} - Failed: {2} ", - series.Title, successCount, failCount); - } - else - { - logger.Info("Finished episode refresh for series: {0}.", series.Title); - } - - DeleteEpisodesNotInTvdb(series, tvdbEpisodes); - } - - public virtual void UpdateEpisode(Episode episode) - { - _database.Update(episode); - } - - public virtual IList GetSeasons(int seriesId) - { - return _database.Fetch("SELECT DISTINCT SeasonNumber FROM Episodes WHERE SeriesId=@0", seriesId).OrderBy(c => c).ToList(); - } - - public virtual IList GetEpisodeNumbersBySeason(int seriesId, int seasonNumber) - { - return _database.Fetch("SELECT EpisodeNumber FROM Episodes WHERE SeriesId=@0 AND SeasonNumber=@1", seriesId, seasonNumber).OrderBy(c => c).ToList(); - } - - public virtual void SetEpisodeIgnore(int episodeId, bool isIgnored) - { - _database.Execute(@"UPDATE Episodes SET Ignored = @0 - WHERE EpisodeId = @1", - isIgnored, episodeId); - - logger.Info("Ignore flag for Episode:{0} was set to {1}", episodeId, isIgnored); - } - - public virtual bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber, int episodeNumber) - { - var episodes = GetEpisodesBySeason(seriesId, seasonNumber).OrderBy(e => e.EpisodeNumber); - - if (!episodes.Any()) - return false; - - //Ensure that this is either the first episode - //or is the last episode in a season that has 10 or more episodes - if (episodes.First().EpisodeNumber == episodeNumber || (episodes.Count() >= 10 && episodes.Last().EpisodeNumber == episodeNumber)) - return true; - - return false; - } - - public virtual void DeleteEpisodesNotInTvdb(Series series, IList tvdbEpisodes) - { - logger.Trace("Starting deletion of episodes that no longer exist in TVDB: {0}", series.Title.WithDefault(series.SeriesId)); - - if (!tvdbEpisodes.Any()) return; - - //Delete Episodes not matching TvDbIds for this series - var tvDbIds = tvdbEpisodes.Select(e => e.Id); - var tvDbIdString = String.Join(", ", tvDbIds); - - var tvDbIdQuery = String.Format("DELETE FROM Episodes WHERE SeriesId = {0} AND TvDbEpisodeId > 0 AND TvDbEpisodeId NOT IN ({1})", - series.SeriesId, tvDbIdString); - - _database.Execute(tvDbIdQuery); - - logger.Trace("Deleted episodes that no longer exist in TVDB for {0}", series.SeriesId); - } - - public virtual void SetPostDownloadStatus(List episodeIds, PostDownloadStatusType postDownloadStatus) - { - if (episodeIds.Count == 0) throw new ArgumentException("episodeIds should contain one or more episode ids."); - - var episodeIdString = String.Join(", ", episodeIds); - - var episodeIdQuery = String.Format(@"UPDATE Episodes SET PostDownloadStatus = {0} - WHERE EpisodeId IN ({1})", (int)postDownloadStatus, episodeIdString); - - logger.Trace("Updating PostDownloadStatus for all episodeIds in {0}", episodeIdString); - _database.Execute(episodeIdQuery); - } - - public virtual void UpdateEpisodes(List episodes) - { - _database.UpdateMany(episodes); - } - - public virtual Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber) - { - var episode = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - LEFT JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId - WHERE Episodes.SeriesId = @0 AND Episodes.SceneSeasonNumber = @1 AND Episodes.SceneEpisodeNumber = @2", seriesId, seasonNumber, episodeNumber).SingleOrDefault(); - - if (episode == null) - return null; - - if (episode.EpisodeFileId == 0) - episode.EpisodeFile = null; - - return episode; - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/Tv/SeasonProvider.cs b/NzbDrone.Core/Tv/EpisodeRepository.cs similarity index 58% rename from NzbDrone.Core/Tv/SeasonProvider.cs rename to NzbDrone.Core/Tv/EpisodeRepository.cs index 54490c086..2d7ecf95a 100644 Binary files a/NzbDrone.Core/Tv/SeasonProvider.cs and b/NzbDrone.Core/Tv/EpisodeRepository.cs differ diff --git a/NzbDrone.Core/Tv/EpisodeService.cs b/NzbDrone.Core/Tv/EpisodeService.cs new file mode 100644 index 000000000..a402948e4 --- /dev/null +++ b/NzbDrone.Core/Tv/EpisodeService.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NLog; +using NzbDrone.Core.Model; +using NzbDrone.Core.Providers; +using TvdbLib.Data; + +namespace NzbDrone.Core.Tv +{ + public interface IEpisodeService + { + void AddEpisode(Episode episode); + Episode GetEpisode(int id); + Episode GetEpisode(int seriesId, int seasonNumber, int episodeNumber); + Episode GetEpisode(int seriesId, DateTime date); + IList GetEpisodeBySeries(int seriesId); + IList GetEpisodesBySeason(int seriesId, int seasonNumber); + void MarkEpisodeAsFetched(int episodeId); + IList GetEpisodesByParseResult(EpisodeParseResult parseResult); + IList EpisodesWithoutFiles(bool includeSpecials); + IList GetEpisodesByFileId(int episodeFileId); + IList EpisodesWithFiles(); + void RefreshEpisodeInfo(Series series); + void UpdateEpisode(Episode episode); + IList GetEpisodeNumbersBySeason(int seriesId, int seasonNumber); + void SetEpisodeIgnore(int episodeId, bool isIgnored); + bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber, int episodeNumber); + void DeleteEpisodesNotInTvdb(Series series, IList tvdbEpisodes); + void SetPostDownloadStatus(List episodeIds, PostDownloadStatusType postDownloadStatus); + void UpdateEpisodes(List episodes); + Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber); + } + + public class EpisodeService : IEpisodeService + { + + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + private readonly TvDbProvider _tvDbProvider; + private readonly ISeasonRepository _seasonRepository; + private readonly EpisodeRepository _episodeRepository; + + public EpisodeService(TvDbProvider tvDbProviderProvider, ISeasonRepository seasonRepository, EpisodeRepository episodeRepository) + { + _tvDbProvider = tvDbProviderProvider; + _seasonRepository = seasonRepository; + _episodeRepository = episodeRepository; + } + + public void AddEpisode(Episode episode) + { + episode.Ignored = _seasonRepository.IsIgnored(episode.SeriesId, episode.SeasonNumber); + _episodeRepository.Insert(episode); + } + + public virtual Episode GetEpisode(int id) + { + return _episodeRepository.Get(id); + } + + public virtual Episode GetEpisode(int seriesId, int seasonNumber, int episodeNumber) + { + return _episodeRepository.Get(seriesId, seasonNumber, episodeNumber); + } + + public virtual Episode GetEpisode(int seriesId, DateTime date) + { + return _episodeRepository.Get(seriesId, date); + } + + public virtual IList GetEpisodeBySeries(int seriesId) + { + return _episodeRepository.GetEpisodes(seriesId); + } + + public virtual IList GetEpisodesBySeason(int seriesId, int seasonNumber) + { + return _episodeRepository.GetEpisodes(seriesId, seasonNumber); + } + + public virtual void MarkEpisodeAsFetched(int episodeId) + { + logger.Trace("Marking episode {0} as fetched.", episodeId); + var episode = _episodeRepository.Get(episodeId); + episode.GrabDate = DateTime.UtcNow; + _episodeRepository.Update(episode); + } + + public virtual IList GetEpisodesByParseResult(EpisodeParseResult parseResult) + { + var result = new List(); + + if (parseResult.AirDate.HasValue) + { + if (parseResult.Series.SeriesType == SeriesType.Standard) + { + //Todo: Collect this as a Series we want to treat as a daily series, or possible parsing error + logger.Warn("Found daily-style episode for non-daily series: {0}. {1}", parseResult.Series.Title, parseResult.OriginalString); + return new List(); + } + + var episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.AirDate.Value); + + if (episodeInfo != null) + { + result.Add(episodeInfo); + parseResult.EpisodeTitle = episodeInfo.Title; + } + + return result; + } + + if (parseResult.EpisodeNumbers == null) + return result; + + //Set it to empty before looping through the episode numbers + parseResult.EpisodeTitle = String.Empty; + + foreach (var episodeNumber in parseResult.EpisodeNumbers) + { + Episode episodeInfo = null; + + if (parseResult.SceneSource && parseResult.Series.UseSceneNumbering) + episodeInfo = GetEpisodeBySceneNumbering(parseResult.Series.SeriesId, parseResult.SeasonNumber, episodeNumber); + + if (episodeInfo == null) + { + episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.SeasonNumber, episodeNumber); + if (episodeInfo == null && parseResult.AirDate != null) + { + episodeInfo = GetEpisode(parseResult.Series.SeriesId, parseResult.AirDate.Value); + } + } + + if (episodeInfo != null) + { + result.Add(episodeInfo); + + if (parseResult.Series.UseSceneNumbering) + { + logger.Info("Using Scene to TVDB Mapping for: {0} - Scene: {1}x{2:00} - TVDB: {3}x{4:00}", + parseResult.Series.Title, + episodeInfo.SceneSeasonNumber, + episodeInfo.SceneEpisodeNumber, + episodeInfo.SeasonNumber, + episodeInfo.EpisodeNumber); + } + + if (parseResult.EpisodeNumbers.Count == 1) + { + parseResult.EpisodeTitle = episodeInfo.Title.Trim(); + } + else + { + parseResult.EpisodeTitle = Parser.CleanupEpisodeTitle(episodeInfo.Title); + } + } + else + { + logger.Debug("Unable to find {0}", parseResult); + } + } + + return result; + } + + public virtual IList EpisodesWithoutFiles(bool includeSpecials) + { + return _episodeRepository.EpisodesWithoutFiles(includeSpecials); + } + + public virtual IList GetEpisodesByFileId(int episodeFileId) + { + return _episodeRepository.GetEpisodeByFileId(episodeFileId); + } + + public virtual IList EpisodesWithFiles() + { + return _episodeRepository.EpisodesWithFiles(); + } + + public virtual void RefreshEpisodeInfo(Series series) + { + logger.Trace("Starting episode info refresh for series: {0}", series.Title.WithDefault(series.SeriesId)); + var successCount = 0; + var failCount = 0; + + var tvdbEpisodes = _tvDbProvider.GetSeries(series.SeriesId, true) + .Episodes + .Where(episode => !string.IsNullOrWhiteSpace(episode.EpisodeName) || + (episode.FirstAired < DateTime.Now.AddDays(2) && episode.FirstAired.Year > 1900)) + .ToList(); + + var seriesEpisodes = GetEpisodeBySeries(series.SeriesId); + var updateList = new List(); + var newList = new List(); + + foreach (var episode in tvdbEpisodes.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) + { + try + { + logger.Trace("Updating info for [{0}] - S{1:00}E{2:00}", series.Title, episode.SeasonNumber, episode.EpisodeNumber); + + //first check using tvdbId, this should cover cases when and episode number in a season is changed + var episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.TvDbEpisodeId == episode.Id); + + //not found, try using season/episode number + if (episodeToUpdate == null) + { + episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.SeasonNumber == episode.SeasonNumber && e.EpisodeNumber == episode.EpisodeNumber); + } + + if (episodeToUpdate == null) + { + episodeToUpdate = new Episode(); + newList.Add(episodeToUpdate); + + //If it is Episode Zero Ignore it (specials, sneak peeks.) + if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) + { + episodeToUpdate.Ignored = true; + } + else + { + episodeToUpdate.Ignored = _seasonRepository.IsIgnored(series.SeriesId, episode.SeasonNumber); + } + } + else + { + updateList.Add(episodeToUpdate); + } + + if ((episodeToUpdate.EpisodeNumber != episode.EpisodeNumber || + episodeToUpdate.SeasonNumber != episode.SeasonNumber) && + episodeToUpdate.EpisodeFileId > 0) + { + logger.Info("Unlinking episode file because TheTVDB changed the epsiode number..."); + episodeToUpdate.EpisodeFile = null; + } + + episodeToUpdate.SeriesId = series.SeriesId; + episodeToUpdate.TvDbEpisodeId = episode.Id; + episodeToUpdate.EpisodeNumber = episode.EpisodeNumber; + episodeToUpdate.SeasonNumber = episode.SeasonNumber; + episodeToUpdate.AbsoluteEpisodeNumber = episode.AbsoluteNumber; + episodeToUpdate.Title = episode.EpisodeName; + + episodeToUpdate.Overview = episode.Overview.Truncate(3500); + + if (episode.FirstAired.Year > 1900) + episodeToUpdate.AirDate = episode.FirstAired.Date; + else + episodeToUpdate.AirDate = null; + + successCount++; + } + catch (Exception e) + { + logger.FatalException(String.Format("An error has occurred while updating episode info for series {0}", series.Title), e); + failCount++; + } + } + + _episodeRepository.InsertMany(newList); + _episodeRepository.UpdateMany(updateList); + + if (failCount != 0) + { + logger.Info("Finished episode refresh for series: {0}. Successful: {1} - Failed: {2} ", + series.Title, successCount, failCount); + } + else + { + logger.Info("Finished episode refresh for series: {0}.", series.Title); + } + + DeleteEpisodesNotInTvdb(series, tvdbEpisodes); + } + + public virtual void UpdateEpisode(Episode episode) + { + _episodeRepository.Update(episode); + } + + + public virtual IList GetEpisodeNumbersBySeason(int seriesId, int seasonNumber) + { + return GetEpisodesBySeason(seriesId, seasonNumber).Select(c => c.OID).ToList(); + } + + public virtual void SetEpisodeIgnore(int episodeId, bool isIgnored) + { + var episode = _episodeRepository.Get(episodeId); + episode.Ignored = isIgnored; + _episodeRepository.Update(episode); + + logger.Info("Ignore flag for Episode:{0} was set to {1}", episodeId, isIgnored); + } + + public virtual bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber, int episodeNumber) + { + var episodes = GetEpisodesBySeason(seriesId, seasonNumber).OrderBy(e => e.EpisodeNumber); + + if (!episodes.Any()) + return false; + + //Ensure that this is either the first episode + //or is the last episode in a season that has 10 or more episodes + if (episodes.First().EpisodeNumber == episodeNumber || (episodes.Count() >= 10 && episodes.Last().EpisodeNumber == episodeNumber)) + return true; + + return false; + } + + public virtual void DeleteEpisodesNotInTvdb(Series series, IList tvdbEpisodes) + { + logger.Trace("Starting deletion of episodes that no longer exist in TVDB: {0}", series.Title.WithDefault(series.SeriesId)); + + if (!tvdbEpisodes.Any()) return; + + var seriesEpisodeIds = _episodeRepository.GetEpisodes(series.SeriesId).Select(c => c.OID); + + var toBeDeleted = seriesEpisodeIds.Except(tvdbEpisodes.Select(e => e.Id)); + + foreach (var id in toBeDeleted) + { + _episodeRepository.Delete(id); + } + + logger.Trace("Deleted episodes that no longer exist in TVDB for {0}", series.SeriesId); + } + + public virtual void SetPostDownloadStatus(List episodeIds, PostDownloadStatusType postDownloadStatus) + { + if (episodeIds.Count == 0) throw new ArgumentException("episodeIds should contain one or more episode ids."); + + + foreach (var episodeId in episodeIds) + { + var episode = _episodeRepository.Get(episodeId); + episode.PostDownloadStatus = postDownloadStatus; + _episodeRepository.Update(episode); + } + + + logger.Trace("Updating PostDownloadStatus for {0} episode(s) to {1}", episodeIds.Count, postDownloadStatus); + } + + public virtual void UpdateEpisodes(List episodes) + { + _episodeRepository.UpdateMany(episodes); + } + + public virtual Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber) + { + return _episodeRepository.GetEpisodeBySceneNumbering(seriesId, seasonNumber, episodeNumber); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Tv/Season.cs b/NzbDrone.Core/Tv/Season.cs index a7d39f541..2bda45ed1 100644 --- a/NzbDrone.Core/Tv/Season.cs +++ b/NzbDrone.Core/Tv/Season.cs @@ -1,13 +1,12 @@ using System.Linq; using System; using System.Collections.Generic; -using PetaPoco; +using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Tv { - public class Season + public class Season : ModelBase { - public int SeasonId { get; set; } public int SeriesId { get; set; } public int SeasonNumber { get; set; } public Boolean Ignored { get; set; } diff --git a/NzbDrone.Core/Tv/SeasonRepository.cs b/NzbDrone.Core/Tv/SeasonRepository.cs new file mode 100644 index 000000000..471c6cc55 --- /dev/null +++ b/NzbDrone.Core/Tv/SeasonRepository.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using System.Linq; +using NLog; +using NzbDrone.Core.Datastore; +using PetaPoco; + +namespace NzbDrone.Core.Tv +{ + public interface ISeasonRepository : IBasicRepository + { + IList GetSeasonNumbers(int seriesId); + Season Get(int seriesId, int seasonNumber); + bool IsIgnored(int seriesId, int seasonNumber); + List GetSeasonBySeries(int seriesId); + } + + public class SeasonRepository : BasicRepository, ISeasonRepository + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + private readonly IDatabase _database; + + public SeasonRepository(IObjectDatabase database) + : base(database) + { + } + + public IList GetSeasonNumbers(int seriesId) + { + return Queryable.Where(c => c.SeriesId == seriesId).Select(c => c.SeasonNumber).ToList(); + } + + public Season Get(int seriesId, int seasonNumber) + { + return Queryable.Single(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber); + } + + public bool IsIgnored(int seriesId, int seasonNumber) + { + return Queryable.Single(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber).Ignored; + } + + public List GetSeasonBySeries(int seriesId) + { + return Queryable.Where(c => c.SeriesId == seriesId).ToList(); + } + + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Tv/SeasonService.cs b/NzbDrone.Core/Tv/SeasonService.cs new file mode 100644 index 000000000..7f85bfc15 Binary files /dev/null and b/NzbDrone.Core/Tv/SeasonService.cs differ diff --git a/NzbDrone.Core/Tv/Series.cs b/NzbDrone.Core/Tv/Series.cs index d9d1f7c8c..03abdacb6 100644 --- a/NzbDrone.Core/Tv/Series.cs +++ b/NzbDrone.Core/Tv/Series.cs @@ -1,12 +1,23 @@ using System.Linq; using System; +using NzbDrone.Core.Datastore; using NzbDrone.Core.Model; using NzbDrone.Core.Repository.Quality; using PetaPoco; namespace NzbDrone.Core.Tv { - public class Series + + + public enum SeriesType + { + Standard =0, + Daily =1, + Anime = 2, + } + + + public class Series : ModelBase { public virtual int SeriesId { get; set; } @@ -41,7 +52,7 @@ namespace NzbDrone.Core.Tv public string BannerUrl { get; set; } - public bool IsDaily { get; set; } + public SeriesType SeriesType { get; set; } public BacklogSettingType BacklogSetting { get; set; } diff --git a/NzbDrone.Core/Tv/SeriesProvider.cs b/NzbDrone.Core/Tv/SeriesProvider.cs index 0a2873b94..344652521 100644 --- a/NzbDrone.Core/Tv/SeriesProvider.cs +++ b/NzbDrone.Core/Tv/SeriesProvider.cs @@ -3,101 +3,57 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using NLog; -using NzbDrone.Common; +using NzbDrone.Common.EnsureThat; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; -using NzbDrone.Core.Repository; -using NzbDrone.Core.Repository.Quality; -using PetaPoco; namespace NzbDrone.Core.Tv { - public class SeriesProvider + public interface ISeriesService { - + bool IsMonitored(int id); + Series UpdateSeriesInfo(int seriesId); + Series FindSeries(string title); + void AddSeries(string title, string path, int tvDbSeriesId, int qualityProfileId, DateTime? airedAfter); + void UpdateFromSeriesEditor(IList editedSeries); + } + + public class SeriesService : ISeriesService + { + private readonly ISeriesRepository _seriesRepository; private readonly ConfigProvider _configProvider; private readonly TvDbProvider _tvDbProvider; - private readonly IDatabase _database; - private readonly SceneMappingProvider _sceneNameMappingProvider; - private readonly BannerProvider _bannerProvider; private readonly MetadataProvider _metadataProvider; private readonly TvRageMappingProvider _tvRageMappingProvider; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - private static readonly Regex TimeRegex = new Regex(@"^(?