diff --git a/NzbDrone.Core.Test/DiskScanProviderTest.cs b/NzbDrone.Core.Test/DiskScanProviderTest.cs index 386766810..efe556039 100644 --- a/NzbDrone.Core.Test/DiskScanProviderTest.cs +++ b/NzbDrone.Core.Test/DiskScanProviderTest.cs @@ -18,249 +18,124 @@ namespace NzbDrone.Core.Test // ReSharper disable InconsistentNaming public class DiskScanProviderTest : TestBase { + [Test] - public void import_new_file_should_succeed() + public void scan_series_should_update_last_scan_date() { - const string newFile = @"WEEDS.S03E01.DUAL.dvd.HELLYWOOD.avi"; - var fakeSeries = Builder.CreateNew().Build(); - var fakeEpisode = Builder.CreateNew().Build(); - - //Mocks var mocker = new AutoMoqer(); - - mocker.GetMock() - .Setup(e => e.GetSize(newFile)).Returns(12345).Verifiable(); - - mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())) - .Returns(false); + mocker.GetMock() + .Setup(c => c.UpdateSeries(It.Is(s => s.LastDiskSync != null))).Verifiable(); mocker.GetMock() - .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); - - //Act - var result = mocker.Resolve().ImportFile(fakeSeries, newFile); - - //Assert - VerifyFileImport(result, mocker, fakeEpisode, 12345); - - } - - [TestCase(QualityTypes.SDTV, false)] - [TestCase(QualityTypes.DVD, true)] - [TestCase(QualityTypes.HDTV, false)] - public void import_new_file_with_better_same_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper) - { - const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv"; - const int size = 12345; - - //Fakes - var fakeSeries = Builder.CreateNew().Build(); - var fakeEpisode = Builder.CreateNew() - .With(e => e.EpisodeFile = Builder.CreateNew() - .With(g => g.Quality = (QualityTypes)currentFileQuality) - .And(g => g.Proper = currentFileProper).Build() - ).Build(); - - var mocker = new AutoMoqer(); - - mocker.GetMock() - .Setup(e => e.GetSize(newFile)).Returns(12345).Verifiable(); + .Setup(c => c.GetEpisodeBySeries(It.IsAny())) + .Returns(new List { new Episode() }); + mocker.GetMock() + .Setup(c => c.GetSeriesFiles(It.IsAny())) + .Returns(new List()); - mocker.GetMock() - .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); + mocker.Resolve().Scan(new Series()); - //Act - var result = mocker.Resolve().ImportFile(fakeSeries, newFile); + mocker.VerifyAllMocks(); - //Assert - VerifyFileImport(result, mocker, fakeEpisode, size); } - - - [TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")] - [TestCase("WEEDS.S03E01.DUAL.SDTV.XviD.AC3.-HELLYWOOD.avi")] - public void import_new_file_episode_has_same_or_better_quality_should_skip(string fileName) + [Test] + public void cleanup_should_skip_existing_files() { - - //Fakes - var fakeSeries = Builder.CreateNew().Build(); - var fakeEpisode = Builder.CreateNew() - .With(c => c.EpisodeFile = Builder.CreateNew() - .With(e => e.Quality = QualityTypes.Bluray720p).Build() - ) - .Build(); - - //Mocks - var mocker = new AutoMoqer(); + var mocker = new AutoMoqer(MockBehavior.Strict); + var episodes = Builder.CreateListOfSize(10).Build(); mocker.GetMock() - .Setup(e => e.GetSize(fileName)).Returns(12345).Verifiable(); + .Setup(e => e.FileExists(It.IsAny())) + .Returns(true); - mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())) - .Returns(false); - - mocker.GetMock() - .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); //Act - var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + mocker.Resolve().CleanUp(episodes); //Assert - VerifySkipImport(result, mocker); + mocker.VerifyAllMocks(); } - [Test] - public void import_unparsable_file_should_skip() + public void cleanup_should_delete_none_existing_files() { - const string fileName = @"WEEDS.avi"; - const int size = 12345; - - var fakeSeries = Builder.CreateNew().Build(); + var mocker = new AutoMoqer(MockBehavior.Strict); + var episodes = Builder.CreateListOfSize(10).Build(); + mocker.GetMock() + .Setup(e => e.FileExists(It.IsAny())) + .Returns(false); - var mocker = new AutoMoqer(); + mocker.GetMock() + .Setup(e => e.GetEpisodesByFileId(It.IsAny())) + .Returns(new List()); mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())).Returns(false); + .Setup(e => e.Delete(It.IsAny())); - mocker.GetMock() - .Setup(e => e.GetSize(fileName)).Returns(size).Verifiable(); //Act - var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + mocker.Resolve().CleanUp(episodes); //Assert - VerifySkipImport(result, mocker); - ExceptionVerification.ExcpectedWarns(1); - } - - [Test] - public void import_sample_file_should_skip() - { - const string fileName = @"2011.01.10 - Denis Leary - sample - HD TV.mkv"; - const int size = 12345; - //Fakes - var fakeSeries = Builder.CreateNew().Build(); + mocker.VerifyAllMocks(); - //Mocks - var mocker = new AutoMoqer(); + mocker.GetMock() + .Verify(e => e.GetEpisodesByFileId(It.IsAny()), Times.Exactly(10)); mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())).Returns(false); - - mocker.GetMock() - .Setup(e => e.GetSize(fileName)).Returns(size).Verifiable(); - - //Act - var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + .Verify(e => e.Delete(It.IsAny()), Times.Exactly(10)); - //Assert - VerifySkipImport(result, mocker); } + [Test] - public void import_existing_file_should_skip() + public void cleanup_should_delete_none_existing_files_remove_links_to_episodes() { - const string fileName = "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; - - var fakeSeries = Builder.CreateNew().Build(); - var mocker = new AutoMoqer(MockBehavior.Strict); - mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())) - .Returns(true); + var episodes = Builder.CreateListOfSize(10).Build(); - //Act - var result = mocker.Resolve().ImportFile(fakeSeries, fileName); - - //Assert - VerifySkipImport(result, mocker); - } + mocker.GetMock() + .Setup(e => e.FileExists(It.IsAny())) + .Returns(false); - [Test] - public void import_file_with_no_episode_in_db_should_skip() - { - //Constants - const string fileName = "WEEDS.S03E01.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; + mocker.GetMock() + .Setup(e => e.GetEpisodesByFileId(It.IsAny())) + .Returns(new List { new Episode { EpisodeFileId = 10 }, new Episode { EpisodeFileId = 10 } }); - //Fakes - var fakeSeries = Builder.CreateNew().Build(); + mocker.GetMock() + .Setup(e => e.UpdateEpisode(It.IsAny())); - //Mocks - var mocker = new AutoMoqer(); mocker.GetMock() - .Setup(p => p.Exists(It.IsAny())) - .Returns(false); - - mocker.GetMock(MockBehavior.Strict) - .Setup(e => e.GetSize(fileName)).Returns(90000000000); - - mocker.GetMock() - .Setup(c => c.GetEpisodesByParseResult(It.IsAny(), false)) - .Returns(new List()); + .Setup(e => e.Delete(It.IsAny())); //Act - var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + mocker.Resolve().CleanUp(episodes); //Assert - VerifySkipImport(result, mocker); - } - - [Test] - public void scan_series_should_update_last_scan_date() - { - - var mocker = new AutoMoqer(); - mocker.GetMock() - .Setup(c => c.UpdateSeries(It.Is(s => s.LastDiskSync != null))).Verifiable(); + mocker.VerifyAllMocks(); mocker.GetMock() - .Setup(c => c.GetEpisodeBySeries(It.IsAny())) - .Returns(new List { new Episode() }); + .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() - .Setup(c => c.GetSeriesFiles(It.IsAny())) - .Returns(new List()); - - mocker.Resolve().Scan(new Series()); + .Verify(e => e.Delete(It.IsAny()), Times.Exactly(10)); - mocker.VerifyAllMocks(); + mocker.GetMock() + .Verify(e => e.Delete(It.IsAny()), Times.Exactly(10)); } - private static void VerifyFileImport(EpisodeFile result, AutoMoqer mocker, Episode fakeEpisode, int size) - { - mocker.VerifyAllMocks(); - result.Should().NotBeNull(); - result.SeriesId.Should().Be(fakeEpisode.SeriesId); - result.Size.Should().Be(size); - result.DateAdded.Should().HaveDay(DateTime.Now.Day); - mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Once()); - - //Get the count of episodes linked - var count = mocker.GetMock().Object.GetEpisodesByParseResult(null, false).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) - { - mocker.VerifyAllMocks(); - result.Should().BeNull(); - mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Never()); - mocker.GetMock().Verify(p => p.UpdateEpisode(It.IsAny()), Times.Never()); - } } } diff --git a/NzbDrone.Core.Test/DiskScanProviderTest_ImportFile.cs b/NzbDrone.Core.Test/DiskScanProviderTest_ImportFile.cs new file mode 100644 index 000000000..3ea583061 --- /dev/null +++ b/NzbDrone.Core.Test/DiskScanProviderTest_ImportFile.cs @@ -0,0 +1,241 @@ +using System; +using System.Collections.Generic; +using AutoMoq; +using FizzWare.NBuilder; +using FluentAssertions; +using Moq; +using NUnit.Framework; +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 PetaPoco; + +namespace NzbDrone.Core.Test +{ + // ReSharper disable InconsistentNaming + public class DiskScanProviderTest_ImportFile : TestBase + { + [Test] + public void import_new_file_should_succeed() + { + const string newFile = @"WEEDS.S03E01.DUAL.dvd.HELLYWOOD.avi"; + + var fakeSeries = Builder.CreateNew().Build(); + var fakeEpisode = Builder.CreateNew().Build(); + + //Mocks + var mocker = new AutoMoqer(); + + mocker.GetMock() + .Setup(e => e.GetSize(newFile)).Returns(12345).Verifiable(); + + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())) + .Returns(false); + + mocker.GetMock() + .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, newFile); + + //Assert + VerifyFileImport(result, mocker, fakeEpisode, 12345); + + } + + [TestCase(QualityTypes.SDTV, false)] + [TestCase(QualityTypes.DVD, true)] + [TestCase(QualityTypes.HDTV, false)] + public void import_new_file_with_better_same_quality_should_succeed(QualityTypes currentFileQuality, bool currentFileProper) + { + const string newFile = @"WEEDS.S03E01.DUAL.1080p.HELLYWOOD.mkv"; + const int size = 12345; + + //Fakes + var fakeSeries = Builder.CreateNew().Build(); + var fakeEpisode = Builder.CreateNew() + .With(e => e.EpisodeFile = Builder.CreateNew() + .With(g => g.Quality = (QualityTypes)currentFileQuality) + .And(g => g.Proper = currentFileProper).Build() + ).Build(); + + var mocker = new AutoMoqer(); + + mocker.GetMock() + .Setup(e => e.GetSize(newFile)).Returns(12345).Verifiable(); + + + + mocker.GetMock() + .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, newFile); + + //Assert + VerifyFileImport(result, mocker, fakeEpisode, size); + } + + + + + [TestCase("WEEDS.S03E01.DUAL.DVD.XviD.AC3.-HELLYWOOD.avi")] + [TestCase("WEEDS.S03E01.DUAL.SDTV.XviD.AC3.-HELLYWOOD.avi")] + public void import_new_file_episode_has_same_or_better_quality_should_skip(string fileName) + { + + //Fakes + var fakeSeries = Builder.CreateNew().Build(); + var fakeEpisode = Builder.CreateNew() + .With(c => c.EpisodeFile = Builder.CreateNew() + .With(e => e.Quality = QualityTypes.Bluray720p).Build() + ) + .Build(); + + //Mocks + var mocker = new AutoMoqer(); + + mocker.GetMock() + .Setup(e => e.GetSize(fileName)).Returns(12345).Verifiable(); + + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())) + .Returns(false); + + mocker.GetMock() + .Setup(e => e.GetEpisodesByParseResult(It.IsAny(), false)).Returns(new List { fakeEpisode }); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + + //Assert + VerifySkipImport(result, mocker); + } + + + [Test] + public void import_unparsable_file_should_skip() + { + const string fileName = @"WEEDS.avi"; + const int size = 12345; + + var fakeSeries = Builder.CreateNew().Build(); + + + var mocker = new AutoMoqer(); + + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())).Returns(false); + + mocker.GetMock() + .Setup(e => e.GetSize(fileName)).Returns(size).Verifiable(); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + + //Assert + VerifySkipImport(result, mocker); + ExceptionVerification.ExcpectedWarns(1); + } + + [Test] + public void import_sample_file_should_skip() + { + const string fileName = @"2011.01.10 - Denis Leary - sample - HD TV.mkv"; + const int size = 12345; + //Fakes + var fakeSeries = Builder.CreateNew().Build(); + + //Mocks + var mocker = new AutoMoqer(); + + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())).Returns(false); + + mocker.GetMock() + .Setup(e => e.GetSize(fileName)).Returns(size).Verifiable(); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + + //Assert + VerifySkipImport(result, mocker); + } + + [Test] + public void import_existing_file_should_skip() + { + const string fileName = "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; + + var fakeSeries = Builder.CreateNew().Build(); + + var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())) + .Returns(true); + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + + //Assert + VerifySkipImport(result, mocker); + } + + [Test] + public void import_file_with_no_episode_in_db_should_skip() + { + //Constants + const string fileName = "WEEDS.S03E01.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; + + //Fakes + var fakeSeries = Builder.CreateNew().Build(); + + //Mocks + var mocker = new AutoMoqer(); + mocker.GetMock() + .Setup(p => p.Exists(It.IsAny())) + .Returns(false); + + mocker.GetMock(MockBehavior.Strict) + .Setup(e => e.GetSize(fileName)).Returns(90000000000); + + mocker.GetMock() + .Setup(c => c.GetEpisodesByParseResult(It.IsAny(), false)) + .Returns(new List()); + + + //Act + var result = mocker.Resolve().ImportFile(fakeSeries, fileName); + + //Assert + VerifySkipImport(result, mocker); + } + + private static void VerifyFileImport(EpisodeFile result, AutoMoqer mocker, Episode fakeEpisode, int size) + { + mocker.VerifyAllMocks(); + result.Should().NotBeNull(); + result.SeriesId.Should().Be(fakeEpisode.SeriesId); + result.Size.Should().Be(size); + result.DateAdded.Should().HaveDay(DateTime.Now.Day); + mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Once()); + + //Get the count of episodes linked + var count = mocker.GetMock().Object.GetEpisodesByParseResult(null, false).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) + { + mocker.VerifyAllMocks(); + result.Should().BeNull(); + mocker.GetMock().Verify(p => p.Add(It.IsAny()), Times.Never()); + mocker.GetMock().Verify(p => p.UpdateEpisode(It.IsAny()), Times.Never()); + } + } +} diff --git a/NzbDrone.Core.Test/LogProviderTest.cs b/NzbDrone.Core.Test/LogProviderTest.cs index 9d8490e7a..35564a072 100644 --- a/NzbDrone.Core.Test/LogProviderTest.cs +++ b/NzbDrone.Core.Test/LogProviderTest.cs @@ -6,6 +6,7 @@ using NLog; using NLog.Config; using NUnit.Framework; using NzbDrone.Core.Instrumentation; +using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test @@ -146,5 +147,22 @@ namespace NzbDrone.Core.Test Assert.AreEqual(ex.ToString(), logItem.Exception); ExceptionVerification.ExcpectedErrors(1); } + + + + + + [Test] + public void null_string_as_arg_should_not_fail() + { + //setup + + Logger Logger = LogManager.GetCurrentClassLogger(); + var epFile = new EpisodeFile(); + Logger.Trace("File {0} no longer exists on disk. removing from database.", epFile.Path); + + epFile.Path.Should().BeNull(); + } + } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/MediaFileProviderTests.cs b/NzbDrone.Core.Test/MediaFileProviderTests.cs index 2dfd46b31..01b424ee4 100644 --- a/NzbDrone.Core.Test/MediaFileProviderTests.cs +++ b/NzbDrone.Core.Test/MediaFileProviderTests.cs @@ -38,11 +38,9 @@ namespace NzbDrone.Core.Test var database = MockLib.GetEmptyDatabase(true); - foreach (var file in firstSeriesFiles) - database.Insert(file); - foreach (var file in secondSeriesFiles) - database.Insert(file); + database.InsertMany(firstSeriesFiles); + database.InsertMany(secondSeriesFiles); mocker.SetConstant(database); @@ -56,7 +54,7 @@ namespace NzbDrone.Core.Test public void Scan_series_should_skip_series_with_no_episodes() { var mocker = new AutoMoqer(MockBehavior.Strict); - + mocker.GetMock() .Setup(c => c.GetEpisodeBySeries(12)) .Returns(new List()); diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index bfed0f28a..8ba9142a0 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -85,8 +85,9 @@ - + + diff --git a/NzbDrone.Core/Helpers/EpisodeRenameHelper.cs b/NzbDrone.Core/Helpers/EpisodeRenameHelper.cs deleted file mode 100644 index f401c221a..000000000 --- a/NzbDrone.Core/Helpers/EpisodeRenameHelper.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using NzbDrone.Core.Model; - -namespace NzbDrone.Core.Helpers -{ - public static class EpisodeRenameHelper - { - public static string GetNewName(EpisodeRenameModel erm) - { - //Todo: Get the users preferred naming convention instead of hard-coding it - - if (erm.EpisodeFile.Episodes.Count == 1) - { - return String.Format("{0} - S{1:00}E{2:00} - {3}", erm.SeriesName, - erm.EpisodeFile.Episodes[0].SeasonNumber, erm.EpisodeFile.Episodes[0].EpisodeNumber, - erm.EpisodeFile.Episodes[0].Title); - } - - var epNumberString = String.Empty; - var epNameString = String.Empty; - - foreach (var episode in erm.EpisodeFile.Episodes) - { - epNumberString = epNumberString + String.Format("E{0:00}", episode.EpisodeNumber); - epNameString = epNameString + String.Format("+ {0}", episode.Title).Trim(' ', '+'); - } - - return String.Format("{0} - S{1:00}E{2} - {3}", erm.SeriesName, erm.EpisodeFile.Episodes[0].SeasonNumber, - epNumberString, epNameString); - } - - public static string GetSeasonFolder(int seasonNumber, string seasonFolderFormat) - { - return seasonFolderFormat.Replace("%s", seasonNumber.ToString()).Replace("%0s", seasonNumber.ToString("00")); - } - - public static string GetNameForNotify(EpisodeRenameModel erm) - { - if (erm.EpisodeFile.Episodes.Count == 1) - { - return String.Format("{0} - S{1:00}E{2:00} - {3}", erm.SeriesName, - erm.EpisodeFile.Episodes[0].SeasonNumber, erm.EpisodeFile.Episodes[0].EpisodeNumber, - erm.EpisodeFile.Episodes[0].Title); - } - - var epNumberString = String.Empty; - var epNameString = String.Empty; - - foreach (var episode in erm.EpisodeFile.Episodes) - { - epNumberString = epNumberString + String.Format("E{0:00}", episode.EpisodeNumber); - epNameString = epNameString + String.Format("+ {0}", episode.Title).Trim(' ', '+'); - } - - return String.Format("{0} - S{1:00}E{2} - {3}", erm.SeriesName, erm.EpisodeFile.Episodes[0].SeasonNumber, - epNumberString, epNameString); - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 1fd72ff8f..a4b8db683 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -180,7 +180,6 @@ - diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index b1b20a908..7392b65be 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -179,7 +179,7 @@ namespace NzbDrone.Core.Providers Logger.Trace("File {0} no longer exists on disk. removing from database.", episodeFile.Path); //Set the EpisodeFileId for each episode attached to this file to 0 - foreach (var episode in episodeFile.Episodes) + foreach (var episode in _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId)) { episode.EpisodeFileId = 0; _episodeProvider.UpdateEpisode(episode); diff --git a/NzbDrone.Core/Repository/EpisodeFile.cs b/NzbDrone.Core/Repository/EpisodeFile.cs index 0647c82e0..44820c64c 100644 --- a/NzbDrone.Core/Repository/EpisodeFile.cs +++ b/NzbDrone.Core/Repository/EpisodeFile.cs @@ -19,12 +19,6 @@ namespace NzbDrone.Core.Repository public long Size { get; set; } public DateTime DateAdded { get; set; } - [Ignore] - public IList Episodes { get; set; } - - [Ignore] - public Series Series { get; set; } - [Ignore] public Model.Quality QualityWrapper {