From 6c44121b093777b16ff26d12dd4b527513f78574 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Thu, 7 Aug 2014 14:42:46 +0200 Subject: [PATCH] Fixed: Now assuming that an Ended series without any airdates are direct-to-dvd. --- .../TvTests/RefreshEpisodeServiceFixture.cs | 25 +++++++++++++++++++ src/NzbDrone.Core/Tv/RefreshEpisodeService.cs | 17 +++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs index 0284b2431..16de304c9 100644 --- a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs @@ -306,5 +306,30 @@ namespace NzbDrone.Core.Test.TvTests _insertedEpisodes.Should().HaveCount(episodes.Count); } + + [Test] + public void should_override_empty_airdate_for_direct_to_dvd() + { + var series = GetSeries(); + series.Status = SeriesStatusType.Ended; + + var episodes = Builder.CreateListOfSize(10) + .All() + .With(v => v.AirDateUtc = null) + .BuildListOfNew(); + + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + .Returns(new List()); + + List updateEpisodes = null; + Mocker.GetMock().Setup(c => c.InsertMany(It.IsAny>())) + .Callback>(c => updateEpisodes = c); + + Subject.RefreshEpisodeInfo(series, episodes); + + updateEpisodes.Should().NotBeNull(); + updateEpisodes.Should().NotBeEmpty(); + updateEpisodes.All(v => v.AirDateUtc.HasValue).Should().BeTrue(); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs index 8db1e864b..46b11c0f1 100644 --- a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs +++ b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs @@ -47,7 +47,7 @@ namespace NzbDrone.Core.Tv dupeFreeRemoteEpisodes = MapAbsoluteEpisodeNumbers(series, dupeFreeRemoteEpisodes); } - foreach (var episode in OrderEpsiodes(series, dupeFreeRemoteEpisodes)) + foreach (var episode in OrderEpisodes(series, dupeFreeRemoteEpisodes)) { try { @@ -90,6 +90,7 @@ namespace NzbDrone.Core.Tv allEpisodes.AddRange(updateList); AdjustMultiEpisodeAirTime(series, allEpisodes); + AdjustDirectToDvdAirDate(series, allEpisodes); _episodeService.DeleteMany(existingEpisodes); _episodeService.UpdateMany(updateList); @@ -151,6 +152,18 @@ namespace NzbDrone.Core.Tv } } + private static void AdjustDirectToDvdAirDate(Series series, IEnumerable allEpisodes) + { + if (series.Status == SeriesStatusType.Ended && allEpisodes.All(v => !v.AirDateUtc.HasValue) && series.FirstAired.HasValue) + { + foreach (var episode in allEpisodes) + { + episode.AirDateUtc = series.FirstAired; + episode.AirDate = series.FirstAired.Value.ToString("yyyy-MM-dd"); + } + } + } + private List MapAbsoluteEpisodeNumbers(Series series, List traktEpisodes) { var tvdbEpisodes = _tvdbProxy.GetEpisodeInfo(series.TvdbId); @@ -192,7 +205,7 @@ namespace NzbDrone.Core.Tv return existingEpisodes.FirstOrDefault(e => e.SeasonNumber == episode.SeasonNumber && e.EpisodeNumber == episode.EpisodeNumber); } - private IEnumerable OrderEpsiodes(Series series, List episodes) + private IEnumerable OrderEpisodes(Series series, List episodes) { if (series.SeriesType == SeriesTypes.Anime) {