1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-12 11:15:43 +02:00

Added the ability to auto-ignore episodes for files that are deleted, good for people that delete after watching. Option is not exposed in the UI and is disabled by default (obviously).

This commit is contained in:
Mark McDowall 2012-01-15 20:12:47 -08:00
parent 0ecc62a6f7
commit 218059e08d
6 changed files with 108 additions and 1 deletions

View File

@ -1590,5 +1590,39 @@ public void RefreshEpisodeInfo_should_ignore_episode_zero_except_if_season_one()
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);
}
} }
} }

View File

@ -0,0 +1,51 @@
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();
}
}
}
}

View File

@ -6,6 +6,7 @@
using NzbDrone.Core.Helpers; using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
namespace NzbDrone.Core.Jobs namespace NzbDrone.Core.Jobs
@ -14,13 +15,16 @@ public class DiskScanJob : IJob
{ {
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()
@ -62,6 +66,9 @@ public virtual void Start(ProgressNotification notification, int targetId, int s
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);
} }
} }
} }

View File

@ -225,6 +225,7 @@
<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" />

View File

@ -402,6 +402,12 @@ public virtual bool EnableBacklogSearching
set { SetValue("EnableBacklogSearching", value); } set { SetValue("EnableBacklogSearching", value); }
} }
public virtual bool AutoIgnorePreviouslyDownloadedEpisodes
{
get { return GetValueBoolean("AutoIgnorePreviouslyDownloadedEpisodes"); }
set { SetValue("AutoIgnorePreviouslyDownloadedEpisodes", value); }
}
private string GetValue(string key) private string GetValue(string key)
{ {
return GetValue(key, String.Empty); return GetValue(key, String.Empty);

View File

@ -463,5 +463,13 @@ public virtual void SetPostDownloadStatus(List<int> episodeIds, PostDownloadStat
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");
}
} }
} }