From 79472964edf80bd2ad5cef04a2d0c0ea265c8313 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 30 Sep 2011 09:32:57 -0700 Subject: [PATCH] DeleteInvalidEpisodes Deletes by TvDbId only, skipping any manually added episodes (TvDbEpisodeId is 0 or null) --- ...isodeProviderTest_DeleteInvalidEpisodes.cs | 106 +++--------------- NzbDrone.Core/Providers/EpisodeProvider.cs | 16 --- 2 files changed, 13 insertions(+), 109 deletions(-) diff --git a/NzbDrone.Core.Test/EpisodeProviderTest_DeleteInvalidEpisodes.cs b/NzbDrone.Core.Test/EpisodeProviderTest_DeleteInvalidEpisodes.cs index 0e6b98707..ef0aef2b8 100644 --- a/NzbDrone.Core.Test/EpisodeProviderTest_DeleteInvalidEpisodes.cs +++ b/NzbDrone.Core.Test/EpisodeProviderTest_DeleteInvalidEpisodes.cs @@ -22,7 +22,7 @@ namespace NzbDrone.Core.Test public class EpisodeProviderTest_DeleteInvalidEpisodes : TestBase { [Test] - public void Delete_None() + public void Delete_None_Valid_TvDbEpisodeId() { //Setup const int seriesId = 71663; @@ -42,8 +42,7 @@ namespace NzbDrone.Core.Test var fakeEpisode = Builder.CreateNew() .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 20) - .With(e => e.EpisodeNumber = 20) + .With(e => e.TvDbEpisodeId = tvDbSeries.Episodes.First().Id) .Build(); var mocker = new AutoMoqer(); @@ -63,7 +62,7 @@ namespace NzbDrone.Core.Test } [Test] - public void Delete_TvDbId() + public void Delete_None_TvDbEpisodeId_is_zero() { //Setup const int seriesId = 71663; @@ -83,9 +82,7 @@ namespace NzbDrone.Core.Test var fakeEpisode = Builder.CreateNew() .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 20) - .With(e => e.EpisodeNumber = 20) - .With(e => e.TvDbEpisodeId = 300) + .With(e => e.TvDbEpisodeId = 0) .Build(); var mocker = new AutoMoqer(); @@ -101,11 +98,11 @@ namespace NzbDrone.Core.Test //Assert var result = db.Fetch(); - result.Should().HaveCount(0); + result.Should().HaveCount(1); } [Test] - public void Delete_EpisodeNumber() + public void Delete_None_TvDbEpisodeId_is_null() { //Setup const int seriesId = 71663; @@ -125,9 +122,7 @@ namespace NzbDrone.Core.Test var fakeEpisode = Builder.CreateNew() .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 1) - .With(e => e.EpisodeNumber = 20) - .With(e => e.TvDbEpisodeId = 1) + .With(e => e.TvDbEpisodeId = null) .Build(); var mocker = new AutoMoqer(); @@ -143,11 +138,11 @@ namespace NzbDrone.Core.Test //Assert var result = db.Fetch(); - result.Should().HaveCount(0); + result.Should().HaveCount(1); } [Test] - public void Delete_Both() + public void Delete_TvDbId() { //Setup const int seriesId = 71663; @@ -165,46 +160,27 @@ namespace NzbDrone.Core.Test .With(c => c.SeriesId = seriesId) .Build(); - var fakeEpisode1 = Builder.CreateNew() + var fakeEpisode = Builder.CreateNew() .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 1) + .With(e => e.SeasonNumber = 20) .With(e => e.EpisodeNumber = 20) - .With(e => e.TvDbEpisodeId = 1) - .Build(); - - var fakeEpisode2 = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 1) - .With(e => e.EpisodeNumber = 1) .With(e => e.TvDbEpisodeId = 300) .Build(); - //This should not be deleted - var fakeEpisode3 = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 1) - .With(e => e.EpisodeNumber = 1) - .With(e => e.TvDbEpisodeId = 1) - .With(e => e.Title = "Not Deleted") - .Build(); - var mocker = new AutoMoqer(); var db = MockLib.GetEmptyDatabase(); mocker.SetConstant(db); db.Insert(fakeSeries); - db.Insert(fakeEpisode1); - db.Insert(fakeEpisode2); - db.Insert(fakeEpisode3); + db.Insert(fakeEpisode); //Act mocker.Resolve().DeleteInvalidEpisodes(fakeSeries, tvDbSeries); //Assert var result = db.Fetch(); - result.Should().HaveCount(1); - result.First().Title.Should().Be("Not Deleted"); + result.Should().HaveCount(0); } //Other series, by season/episode + by tvdbid @@ -263,61 +239,5 @@ namespace NzbDrone.Core.Test var result = db.Fetch(); result.Should().HaveCount(1); } - - [Test] - public void Delete_EpisodeNumber_multiple_series() - { - //Setup - const int seriesId = 71663; - const int episodeCount = 10; - - var tvDbSeries = Builder.CreateNew().With( - c => c.Episodes = - new List(Builder.CreateListOfSize(episodeCount). - WhereAll() - .Have(l => l.Language = new TvdbLanguage(0, "eng", "a")) - .Build()) - ).With(c => c.Id = seriesId).Build(); - - var fakeSeries = Builder.CreateNew() - .With(c => c.SeriesId = seriesId) - .Build(); - - var fakeEpisode = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .With(e => e.SeasonNumber = 1) - .With(e => e.EpisodeNumber = 20) - .With(e => e.TvDbEpisodeId = 1) - .Build(); - - //Other Series - var otherFakeSeries = Builder.CreateNew() - .With(c => c.SeriesId = 12345) - .Build(); - - var otherFakeEpisode = Builder.CreateNew() - .With(e => e.SeriesId = 12345) - .With(e => e.SeasonNumber = 1) - .With(e => e.EpisodeNumber = 4) - .With(e => e.TvDbEpisodeId = 2) - .Build(); - - var mocker = new AutoMoqer(); - - var db = MockLib.GetEmptyDatabase(); - mocker.SetConstant(db); - - db.Insert(fakeSeries); - db.Insert(fakeEpisode); - db.Insert(otherFakeSeries); - db.Insert(otherFakeEpisode); - - //Act - mocker.Resolve().DeleteInvalidEpisodes(fakeSeries, tvDbSeries); - - //Assert - var result = db.Fetch(); - result.Should().HaveCount(1); - } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/EpisodeProvider.cs b/NzbDrone.Core/Providers/EpisodeProvider.cs index d7cbb7009..029f658d7 100644 --- a/NzbDrone.Core/Providers/EpisodeProvider.cs +++ b/NzbDrone.Core/Providers/EpisodeProvider.cs @@ -373,22 +373,6 @@ namespace NzbDrone.Core.Providers { Logger.Info("Starting deletion of invalid episode for series: {0}", series.Title.WithDefault(series.SeriesId)); - var seasons = tvDbSeriesInfo.Episodes.Select(e => e.SeasonNumber).Distinct(); - - foreach (var s in seasons) - { - //Avoiding accessing modified closure - var season = s; - Logger.Trace("Processing invalid episodes for {0}, Season: {1}", series.SeriesId, season); - - var episodesInSeason = tvDbSeriesInfo.Episodes.Where(e => e.SeasonNumber == season).Select(e => e.EpisodeNumber); - var episodesString = String.Join(", ", episodesInSeason); - var seasonQuery = String.Format("DELETE FROM Episodes WHERE SeriesId = {0} AND SeasonNumber = {1} AND EpisodeNumber NOT IN ({2})", - series.SeriesId, season, episodesString); - - _database.Execute(seasonQuery); - } - //Delete Episodes not matching TvDbIds for this series var tvDbIds = tvDbSeriesInfo.Episodes.Select(e => e.Id); var tvDbIdString = String.Join(", ", tvDbIds);