Episode auto-ignore is now done in realtime rather than using a job.
This commit is contained in:
parent
24d51093d6
commit
4da2e1cb72
|
@ -37,9 +37,6 @@ namespace NzbDrone.Core.Test.JobTests
|
||||||
.Setup(p => p.Scan(series))
|
.Setup(p => p.Scan(series))
|
||||||
.Returns(new List<EpisodeFile>());
|
.Returns(new List<EpisodeFile>());
|
||||||
|
|
||||||
Mocker.GetMock<AutoIgnoreJob>()
|
|
||||||
.Setup(s => s.Start(It.IsAny<ProgressNotification>(), 0, 0));
|
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), series.SeriesId, 0);
|
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), series.SeriesId, 0);
|
||||||
|
|
||||||
|
@ -71,9 +68,6 @@ namespace NzbDrone.Core.Test.JobTests
|
||||||
.Setup(s => s.Scan(series[1]))
|
.Setup(s => s.Scan(series[1]))
|
||||||
.Returns(new List<EpisodeFile>());
|
.Returns(new List<EpisodeFile>());
|
||||||
|
|
||||||
Mocker.GetMock<AutoIgnoreJob>()
|
|
||||||
.Setup(s => s.Start(It.IsAny<ProgressNotification>(), 0, 0));
|
|
||||||
|
|
||||||
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,9 +96,6 @@ namespace NzbDrone.Core.Test.JobTests
|
||||||
.Setup(s => s.Scan(series[1]))
|
.Setup(s => s.Scan(series[1]))
|
||||||
.Throws(new InvalidOperationException("Bad Job"));
|
.Throws(new InvalidOperationException("Bad Job"));
|
||||||
|
|
||||||
Mocker.GetMock<AutoIgnoreJob>()
|
|
||||||
.Setup(s => s.Start(It.IsAny<ProgressNotification>(), 0, 0));
|
|
||||||
|
|
||||||
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,8 +125,6 @@ namespace NzbDrone.Core.Test.JobTests
|
||||||
.Setup(s => s.Scan(series[1]))
|
.Setup(s => s.Scan(series[1]))
|
||||||
.Returns(new List<EpisodeFile>());
|
.Returns(new List<EpisodeFile>());
|
||||||
|
|
||||||
Mocker.GetMock<AutoIgnoreJob>()
|
|
||||||
.Setup(s => s.Start(It.IsAny<ProgressNotification>(), 0, 0));
|
|
||||||
|
|
||||||
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
Mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0, 0);
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,7 @@
|
||||||
<Compile Include="JobTests\BacklogSearchJobTest.cs" />
|
<Compile Include="JobTests\BacklogSearchJobTest.cs" />
|
||||||
<Compile Include="JobTests\BannerDownloadJobTest.cs" />
|
<Compile Include="JobTests\BannerDownloadJobTest.cs" />
|
||||||
<Compile Include="JobTests\RecentBacklogSearchJobTest.cs" />
|
<Compile Include="JobTests\RecentBacklogSearchJobTest.cs" />
|
||||||
|
<Compile Include="ProviderTests\MediaFileProviderTests\CleanUpDatabaseFixture.cs" />
|
||||||
<Compile Include="ProviderTests\ReferenceDataProviderTest.cs" />
|
<Compile Include="ProviderTests\ReferenceDataProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\NotificationProviderTests\NotificationProviderFixture.cs" />
|
<Compile Include="ProviderTests\NotificationProviderTests\NotificationProviderFixture.cs" />
|
||||||
<Compile Include="ProviderTests\SearchProviderTests\ProcessDailySearchResultsFixture.cs" />
|
<Compile Include="ProviderTests\SearchProviderTests\ProcessDailySearchResultsFixture.cs" />
|
||||||
|
@ -151,7 +152,7 @@
|
||||||
<Compile Include="ProviderTests\RootDirProviderTest.cs" />
|
<Compile Include="ProviderTests\RootDirProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\IndexerProviderTest.cs" />
|
<Compile Include="ProviderTests\IndexerProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\HistoryProviderTest.cs" />
|
<Compile Include="ProviderTests\HistoryProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\MediaFileProviderTests.cs" />
|
<Compile Include="ProviderTests\MediaFileProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\ConfigProviderTest.cs" />
|
<Compile Include="ProviderTests\ConfigProviderTest.cs" />
|
||||||
<Compile Include="ProviderTests\EpisodeProviderTest.cs" />
|
<Compile Include="ProviderTests\EpisodeProviderTest.cs" />
|
||||||
<Compile Include="Framework\TestDbHelper.cs" />
|
<Compile Include="Framework\TestDbHelper.cs" />
|
||||||
|
|
|
@ -147,13 +147,10 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
.With(s => s.Path = @"C:\Test\TV\SeriesName\")
|
.With(s => s.Path = @"C:\Test\TV\SeriesName\")
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
Mocker.GetMock<MediaFileProvider>()
|
|
||||||
.Setup(c => c.DeleteOrphaned())
|
|
||||||
.Returns(0);
|
|
||||||
|
|
||||||
Mocker.GetMock<MediaFileProvider>()
|
Mocker.GetMock<MediaFileProvider>()
|
||||||
.Setup(c => c.RepairLinks())
|
.Setup(c => c.CleanUpDatabase());
|
||||||
.Returns(0);
|
|
||||||
|
|
||||||
Mocker.GetMock<DiskProvider>()
|
Mocker.GetMock<DiskProvider>()
|
||||||
.Setup(c => c.FolderExists(series.Path))
|
.Setup(c => c.FolderExists(series.Path))
|
||||||
|
|
|
@ -1590,39 +1590,5 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
result.Where(e => e.Ignored).Should().HaveCount(episodeCount - 1);
|
result.Where(e => e.Ignored).Should().HaveCount(episodeCount - 1);
|
||||||
result.Single(e => e.SeasonNumber == 1).Ignored.Should().BeFalse();
|
result.Single(e => e.SeasonNumber == 1).Ignored.Should().BeFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void SetPreviouslyDownloadedToIgnored_should_set_only_episodes_with_no_episode_file_and_postdownload_status_noError_to_ignored()
|
|
||||||
{
|
|
||||||
WithRealDb();
|
|
||||||
|
|
||||||
var postDownloadStatus = PostDownloadStatusType.NoError;
|
|
||||||
|
|
||||||
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
|
|
||||||
.All()
|
|
||||||
.With(c => c.Ignored = false)
|
|
||||||
.TheFirst(2)
|
|
||||||
.With(c => c.PostDownloadStatus = PostDownloadStatusType.NoError)
|
|
||||||
.With(c => c.EpisodeFileId = 0)
|
|
||||||
.TheNext(3)
|
|
||||||
.With(c => c.PostDownloadStatus = PostDownloadStatusType.Unknown)
|
|
||||||
.With(c => c.EpisodeFileId = 0)
|
|
||||||
.TheNext(4)
|
|
||||||
.With(c => c.PostDownloadStatus = PostDownloadStatusType.NoError)
|
|
||||||
.TheNext(1)
|
|
||||||
.With(c => c.PostDownloadStatus = PostDownloadStatusType.NoError)
|
|
||||||
.With(c => c.Ignored = true)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
Db.InsertMany(fakeEpisodes);
|
|
||||||
|
|
||||||
//Act
|
|
||||||
Mocker.Resolve<EpisodeProvider>().SetPreviouslyDownloadedToIgnored();
|
|
||||||
|
|
||||||
//Assert
|
|
||||||
var result = Db.Fetch<Episode>();
|
|
||||||
result.Should().HaveCount(10);
|
|
||||||
result.Where(e => e.Ignored).Count().Should().Be(3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// ReSharper disable RedundantUsingDirective
|
// ReSharper disable RedundantUsingDirective
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
|
@ -7,6 +8,7 @@ using FluentAssertions;
|
||||||
using Moq;
|
using Moq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NzbDrone.Common;
|
using NzbDrone.Common;
|
||||||
|
using NzbDrone.Core.Model;
|
||||||
using NzbDrone.Core.Providers;
|
using NzbDrone.Core.Providers;
|
||||||
using NzbDrone.Core.Providers.Core;
|
using NzbDrone.Core.Providers.Core;
|
||||||
using NzbDrone.Core.Repository;
|
using NzbDrone.Core.Repository;
|
||||||
|
@ -17,7 +19,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
// ReSharper disable InconsistentNaming
|
// ReSharper disable InconsistentNaming
|
||||||
public class MediaFileProviderTests : CoreTest
|
public class MediaFileProviderTest : CoreTest
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
public void get_series_files()
|
public void get_series_files()
|
||||||
|
@ -28,7 +30,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
|
var secondSeriesFiles = Builder<EpisodeFile>.CreateListOfSize(10)
|
||||||
.All().With(s => s.SeriesId = 20).Build();
|
.All().With(s => s.SeriesId = 20).Build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var database = TestDbHelper.GetEmptyDatabase(true);
|
var database = TestDbHelper.GetEmptyDatabase(true);
|
||||||
|
|
||||||
|
@ -59,7 +61,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
.With(s => s.SeasonNumber = 2)
|
.With(s => s.SeasonNumber = 2)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var database = TestDbHelper.GetEmptyDatabase(true);
|
var database = TestDbHelper.GetEmptyDatabase(true);
|
||||||
|
|
||||||
|
@ -83,15 +85,13 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
.Returns(new List<Episode>());
|
.Returns(new List<Episode>());
|
||||||
|
|
||||||
Mocker.GetMock<MediaFileProvider>()
|
Mocker.GetMock<MediaFileProvider>()
|
||||||
.Setup(e => e.RepairLinks()).Returns(0);
|
.Setup(e => e.CleanUpDatabase());
|
||||||
|
|
||||||
Mocker.GetMock<MediaFileProvider>()
|
|
||||||
.Setup(e => e.DeleteOrphaned()).Returns(0);
|
|
||||||
|
|
||||||
Mocker.GetMock<DiskProvider>()
|
Mocker.GetMock<DiskProvider>()
|
||||||
.Setup(c => c.FolderExists(It.IsAny<string>()))
|
.Setup(c => c.FolderExists(It.IsAny<string>()))
|
||||||
.Returns(true);
|
.Returns(true);
|
||||||
|
|
||||||
var series = Builder<Series>.CreateNew()
|
var series = Builder<Series>.CreateNew()
|
||||||
.With(s => s.SeriesId = 12).Build();
|
.With(s => s.SeriesId = 12).Build();
|
||||||
|
|
||||||
|
@ -114,49 +114,6 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
Assert.AreEqual(expectedName, result);
|
Assert.AreEqual(expectedName, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void CleanEpisodesWithNonExistantFiles()
|
|
||||||
{
|
|
||||||
//Setup
|
|
||||||
var episodes = Builder<Episode>.CreateListOfSize(10).Build();
|
|
||||||
|
|
||||||
|
|
||||||
var database = TestDbHelper.GetEmptyDatabase(true);
|
|
||||||
Mocker.SetConstant(database);
|
|
||||||
database.InsertMany(episodes);
|
|
||||||
|
|
||||||
//Act
|
|
||||||
var removedLinks = Mocker.Resolve<MediaFileProvider>().RepairLinks();
|
|
||||||
var result = database.Fetch<Episode>();
|
|
||||||
|
|
||||||
//Assert
|
|
||||||
result.Should().HaveSameCount(episodes);
|
|
||||||
result.Should().OnlyContain(e => e.EpisodeFileId == 0);
|
|
||||||
removedLinks.Should().Be(10);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void DeleteOrphanedEpisodeFiles()
|
|
||||||
{
|
|
||||||
//Setup
|
|
||||||
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build();
|
|
||||||
var episodes = Builder<Episode>.CreateListOfSize(5).Build();
|
|
||||||
|
|
||||||
|
|
||||||
var database = TestDbHelper.GetEmptyDatabase(true);
|
|
||||||
Mocker.SetConstant(database);
|
|
||||||
database.InsertMany(episodes);
|
|
||||||
database.InsertMany(episodeFiles);
|
|
||||||
|
|
||||||
//Act
|
|
||||||
Mocker.Resolve<MediaFileProvider>().DeleteOrphaned();
|
|
||||||
var result = database.Fetch<EpisodeFile>();
|
|
||||||
|
|
||||||
//Assert
|
|
||||||
result.Should().HaveCount(5);
|
|
||||||
result.Should().OnlyContain(e => e.EpisodeFileId > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %0s", @"C:\Test\30 Rock\Season 01\30 Rock - S01E05 - Episode Title.mkv")]
|
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %0s", @"C:\Test\30 Rock\Season 01\30 Rock - S01E05 - Episode Title.mkv")]
|
||||||
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %s", @"C:\Test\30 Rock\Season 1\30 Rock - S01E05 - Episode Title.mkv")]
|
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %s", @"C:\Test\30 Rock\Season 1\30 Rock - S01E05 - Episode Title.mkv")]
|
||||||
|
@ -172,7 +129,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
.With(s => s.SeasonFolder = useSeasonFolder)
|
.With(s => s.SeasonFolder = useSeasonFolder)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
Mocker.GetMock<ConfigProvider>().Setup(e => e.SortingSeasonFolderFormat).Returns(seasonFolderFormat);
|
Mocker.GetMock<ConfigProvider>().Setup(e => e.SortingSeasonFolderFormat).Returns(seasonFolderFormat);
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
|
@ -188,7 +145,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
//Setup
|
//Setup
|
||||||
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build();
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build();
|
||||||
|
|
||||||
|
|
||||||
var database = TestDbHelper.GetEmptyDatabase(true);
|
var database = TestDbHelper.GetEmptyDatabase(true);
|
||||||
Mocker.SetConstant(database);
|
Mocker.SetConstant(database);
|
||||||
database.InsertMany(episodeFiles);
|
database.InsertMany(episodeFiles);
|
|
@ -0,0 +1,134 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using FizzWare.NBuilder;
|
||||||
|
using FluentAssertions;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Model;
|
||||||
|
using NzbDrone.Core.Providers;
|
||||||
|
using NzbDrone.Core.Providers.Core;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class CleanUpDatabaseFixture : CoreTest
|
||||||
|
{
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
WithRealDb();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WithAutoIgnore(bool autoIgnore)
|
||||||
|
{
|
||||||
|
|
||||||
|
Mocker.GetMock<ConfigProvider>()
|
||||||
|
.SetupGet(c => c.AutoIgnorePreviouslyDownloadedEpisodes).Returns(autoIgnore);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CleanUpDatabse_should_detach_none_existing_file_from_episodes_with_auto_ignore()
|
||||||
|
{
|
||||||
|
WithAutoIgnore(true);
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(3)
|
||||||
|
.All().With(c => c.GrabDate = DateTime.Now)
|
||||||
|
.And(c => c.Ignored = false)
|
||||||
|
.And(c => c.PostDownloadStatus = PostDownloadStatusType.NoError)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
|
Db.InsertMany(episodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
|
||||||
|
var result = Db.Fetch<Episode>();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().HaveSameCount(episodes);
|
||||||
|
result.Should().OnlyContain(e => e.EpisodeFileId == 0);
|
||||||
|
result.Should().OnlyContain(e => e.PostDownloadStatus == PostDownloadStatusType.Unknown);
|
||||||
|
result.Should().OnlyContain(e => e.Ignored);
|
||||||
|
result.Should().OnlyContain(e => e.GrabDate == null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CleanUpDatabse_should_detach_none_existing_file_from_episodes_with_no_auto_ignore()
|
||||||
|
{
|
||||||
|
WithAutoIgnore(false);
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(3)
|
||||||
|
.All().With(c => c.GrabDate = DateTime.Now)
|
||||||
|
.And(c => c.PostDownloadStatus = PostDownloadStatusType.NoError)
|
||||||
|
.TheFirst(2).With(c => c.Ignored = true)
|
||||||
|
.TheLast(1).With(c => c.Ignored = false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
|
Db.InsertMany(episodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
|
||||||
|
var result = Db.Fetch<Episode>();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().HaveSameCount(episodes);
|
||||||
|
result.Should().OnlyContain(e => e.EpisodeFileId == 0);
|
||||||
|
result.Should().OnlyContain(e => e.PostDownloadStatus == PostDownloadStatusType.Unknown);
|
||||||
|
result.Should().OnlyContain(e => e.GrabDate == null);
|
||||||
|
result.Should().Contain(c => c.Ignored == true);
|
||||||
|
result.Should().Contain(c => c.Ignored == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CleanUpDatabse_should_not_change_episodes_with_no_file_id()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(3)
|
||||||
|
.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);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
|
||||||
|
var result = Db.Fetch<Episode>();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().HaveSameCount(episodes);
|
||||||
|
result.Should().OnlyContain(e => e.EpisodeFileId == 0);
|
||||||
|
result.Should().NotContain(e => e.PostDownloadStatus == PostDownloadStatusType.Unknown);
|
||||||
|
result.Should().NotContain(e => e.Ignored);
|
||||||
|
result.Should().NotContain(e => e.GrabDate == null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void DeleteOrphanedEpisodeFiles()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(10).Build();
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(5).Build();
|
||||||
|
|
||||||
|
Db.InsertMany(episodes);
|
||||||
|
Db.InsertMany(episodeFiles);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
|
||||||
|
var result = Db.Fetch<EpisodeFile>();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().HaveCount(5);
|
||||||
|
result.Should().OnlyContain(e => e.EpisodeFileId > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -96,7 +96,6 @@ namespace NzbDrone.Core
|
||||||
Kernel.Bind<IJob>().To<AppUpdateJob>().InSingletonScope();
|
Kernel.Bind<IJob>().To<AppUpdateJob>().InSingletonScope();
|
||||||
Kernel.Bind<IJob>().To<TrimLogsJob>().InSingletonScope();
|
Kernel.Bind<IJob>().To<TrimLogsJob>().InSingletonScope();
|
||||||
Kernel.Bind<IJob>().To<RecentBacklogSearchJob>().InSingletonScope();
|
Kernel.Bind<IJob>().To<RecentBacklogSearchJob>().InSingletonScope();
|
||||||
Kernel.Bind<IJob>().To<AutoIgnoreJob>().InSingletonScope();
|
|
||||||
|
|
||||||
Kernel.Get<JobProvider>().Initialize();
|
Kernel.Get<JobProvider>().Initialize();
|
||||||
Kernel.Get<WebTimer>().StartTimer(30);
|
Kernel.Get<WebTimer>().StartTimer(30);
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Ninject;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Core.Helpers;
|
|
||||||
using NzbDrone.Core.Model.Notification;
|
|
||||||
using NzbDrone.Core.Providers;
|
|
||||||
using NzbDrone.Core.Providers.Core;
|
|
||||||
using NzbDrone.Core.Repository;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Jobs
|
|
||||||
{
|
|
||||||
public class AutoIgnoreJob : IJob
|
|
||||||
{
|
|
||||||
private readonly ConfigProvider _configProvider;
|
|
||||||
private readonly EpisodeProvider _episodeProvider;
|
|
||||||
|
|
||||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
public AutoIgnoreJob(ConfigProvider configProvider, EpisodeProvider episodeProvider)
|
|
||||||
{
|
|
||||||
_configProvider = configProvider;
|
|
||||||
_episodeProvider = episodeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AutoIgnoreJob()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Name
|
|
||||||
{
|
|
||||||
get { return "Auto Ignore Episodes"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public TimeSpan DefaultInterval
|
|
||||||
{
|
|
||||||
get { return TimeSpan.FromTicks(0); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Start(ProgressNotification notification, int targetId, int secondaryTargetId)
|
|
||||||
{
|
|
||||||
if (_configProvider.AutoIgnorePreviouslyDownloadedEpisodes)
|
|
||||||
{
|
|
||||||
Logger.Info("Ignoring Previously Downloaded Episodes");
|
|
||||||
_episodeProvider.SetPreviouslyDownloadedToIgnored();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -15,16 +15,13 @@ namespace NzbDrone.Core.Jobs
|
||||||
{
|
{
|
||||||
private readonly SeriesProvider _seriesProvider;
|
private readonly SeriesProvider _seriesProvider;
|
||||||
private readonly DiskScanProvider _diskScanProvider;
|
private readonly DiskScanProvider _diskScanProvider;
|
||||||
private readonly AutoIgnoreJob _autoIgnoreJob;
|
|
||||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public DiskScanJob(SeriesProvider seriesProvider, DiskScanProvider diskScanProvider,
|
public DiskScanJob(SeriesProvider seriesProvider, DiskScanProvider diskScanProvider)
|
||||||
AutoIgnoreJob autoIgnoreJob)
|
|
||||||
{
|
{
|
||||||
_seriesProvider = seriesProvider;
|
_seriesProvider = seriesProvider;
|
||||||
_diskScanProvider = diskScanProvider;
|
_diskScanProvider = diskScanProvider;
|
||||||
_autoIgnoreJob = autoIgnoreJob;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiskScanJob()
|
public DiskScanJob()
|
||||||
|
@ -66,9 +63,6 @@ namespace NzbDrone.Core.Jobs
|
||||||
Logger.ErrorException("An error has occurred while scanning " + series.Title, e);
|
Logger.ErrorException("An error has occurred while scanning " + series.Title, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Start the Auto Ignore Job
|
|
||||||
_autoIgnoreJob.Start(notification, 0 , 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,7 +225,6 @@
|
||||||
<Compile Include="Instrumentation\DatabaseTarget.cs" />
|
<Compile Include="Instrumentation\DatabaseTarget.cs" />
|
||||||
<Compile Include="Instrumentation\NlogWriter.cs" />
|
<Compile Include="Instrumentation\NlogWriter.cs" />
|
||||||
<Compile Include="Datastore\PetaPoco\PetaPoco.cs" />
|
<Compile Include="Datastore\PetaPoco\PetaPoco.cs" />
|
||||||
<Compile Include="Jobs\AutoIgnoreJob.cs" />
|
|
||||||
<Compile Include="Model\AtomicParsleyTitleType.cs" />
|
<Compile Include="Model\AtomicParsleyTitleType.cs" />
|
||||||
<Compile Include="Model\ConnectionInfoModel.cs" />
|
<Compile Include="Model\ConnectionInfoModel.cs" />
|
||||||
<Compile Include="Model\PostDownloadStatusType.cs" />
|
<Compile Include="Model\PostDownloadStatusType.cs" />
|
||||||
|
|
|
@ -56,8 +56,7 @@ namespace NzbDrone.Core.Providers
|
||||||
/// <param name="path">Path to scan</param>
|
/// <param name="path">Path to scan</param>
|
||||||
public virtual List<EpisodeFile> Scan(Series series, string path)
|
public virtual List<EpisodeFile> Scan(Series series, string path)
|
||||||
{
|
{
|
||||||
_mediaFileProvider.DeleteOrphaned();
|
_mediaFileProvider.CleanUpDatabase();
|
||||||
_mediaFileProvider.RepairLinks();
|
|
||||||
|
|
||||||
if (!_diskProvider.FolderExists(path))
|
if (!_diskProvider.FolderExists(path))
|
||||||
{
|
{
|
||||||
|
@ -231,8 +230,11 @@ namespace NzbDrone.Core.Providers
|
||||||
//Set the EpisodeFileId for each episode attached to this file to 0
|
//Set the EpisodeFileId for each episode attached to this file to 0
|
||||||
foreach(var episode in _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId))
|
foreach(var episode in _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId))
|
||||||
{
|
{
|
||||||
Logger.Trace("Setting EpisodeFileId for Episode: [{0}] to 0");
|
Logger.Trace("Setting EpisodeFileId for Episode: [{0}] to 0", episode.EpisodeId);
|
||||||
episode.EpisodeFileId = 0;
|
episode.EpisodeFileId = 0;
|
||||||
|
episode.Ignored = true;
|
||||||
|
episode.GrabDate = null;
|
||||||
|
episode.PostDownloadStatus = PostDownloadStatusType.Unknown;
|
||||||
_episodeProvider.UpdateEpisode(episode);
|
_episodeProvider.UpdateEpisode(episode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -463,13 +463,5 @@ namespace NzbDrone.Core.Providers
|
||||||
Logger.Trace("Updating PostDownloadStatus for all episodeIds in {0}", episodeIdString);
|
Logger.Trace("Updating PostDownloadStatus for all episodeIds in {0}", episodeIdString);
|
||||||
_database.Execute(episodeIdQuery);
|
_database.Execute(episodeIdQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets Ignored to true if the episode successfully downloaded (PostDownloadStatus = 5), but EpisodeFileId = 0
|
|
||||||
/// </summary>
|
|
||||||
public virtual void SetPreviouslyDownloadedToIgnored()
|
|
||||||
{
|
|
||||||
_database.Execute("UPDATE Episodes SET Ignored = 1, PostDownloadStatus = 0 WHERE PostDownloadStatus = 5 AND EpisodeFileId = 0");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} |