diff --git a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs index fbde4cb5d..cf3656f7e 100644 --- a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs @@ -321,5 +321,49 @@ namespace NzbDrone.Core.Test.TvTests _insertedEpisodes.First().Title.Should().Be("TBA"); } + + [Test] + public void should_update_air_date_when_multiple_episodes_air_on_the_same_day() + { + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + .Returns(new List()); + + var series = GetSeries(); + + var episodes = Builder.CreateListOfSize(2) + .All() + .With(e => e.SeasonNumber = 1) + .With(e => e.AirDate = DateTime.Now.ToShortDateString()) + .With(e => e.AirDateUtc = DateTime.UtcNow) + .Build() + .ToList(); + + Subject.RefreshEpisodeInfo(series, episodes); + + _insertedEpisodes.First().AirDateUtc.Should().Be(episodes.First().AirDateUtc); + _insertedEpisodes.Last().AirDateUtc.Should().Be(episodes.First().AirDateUtc.Value.AddMinutes(series.Runtime)); + } + + [Test] + public void should_not_update_air_date_when_multiple_episodes_air_on_the_same_day_for_netflix() + { + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + .Returns(new List()); + + var series = GetSeries(); + series.Network = "Netflix"; + + var episodes = Builder.CreateListOfSize(2) + .All() + .With(e => e.SeasonNumber = 1) + .With(e => e.AirDate = DateTime.Now.ToShortDateString()) + .With(e => e.AirDateUtc = DateTime.UtcNow) + .Build() + .ToList(); + + Subject.RefreshEpisodeInfo(series, episodes); + + _insertedEpisodes.Should().OnlyContain(e => e.AirDateUtc == episodes.First().AirDateUtc); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs index ee0d4277b..50bc36aef 100644 --- a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs +++ b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs @@ -106,7 +106,7 @@ namespace NzbDrone.Core.Tv } } - private static bool GetMonitoredStatus(Episode episode, IEnumerable seasons) + private bool GetMonitoredStatus(Episode episode, IEnumerable seasons) { if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) { @@ -117,17 +117,23 @@ namespace NzbDrone.Core.Tv return season == null || season.Monitored; } - private static void AdjustMultiEpisodeAirTime(Series series, IEnumerable allEpisodes) + private void AdjustMultiEpisodeAirTime(Series series, IEnumerable allEpisodes) { - var groups = - allEpisodes.Where(c => c.AirDateUtc.HasValue) - .GroupBy(e => new { e.SeasonNumber, e.AirDate }) - .Where(g => g.Count() > 1) - .ToList(); + if (series.Network == "Netflix") + { + _logger.Debug("Not adjusting episode air times for Netflix series {0}", series.Title); + return; + } + + var groups = allEpisodes.Where(c => c.AirDateUtc.HasValue) + .GroupBy(e => new {e.SeasonNumber, e.AirDate}) + .Where(g => g.Count() > 1) + .ToList(); foreach (var group in groups) { var episodeCount = 0; + foreach (var episode in group.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) { episode.AirDateUtc = episode.AirDateUtc.Value.AddMinutes(series.Runtime * episodeCount); @@ -136,7 +142,7 @@ namespace NzbDrone.Core.Tv } } - private static void AdjustDirectToDvdAirDate(Series series, IEnumerable allEpisodes) + private void AdjustDirectToDvdAirDate(Series series, IEnumerable allEpisodes) { if (series.Status == SeriesStatusType.Ended && allEpisodes.All(v => !v.AirDateUtc.HasValue) && series.FirstAired.HasValue) {