New: Automatic search for missing episodes if RSS Sync hasn't been run recently

This commit is contained in:
Mark McDowall
2014-04-12 13:49:41 -07:00
parent 0f75a9008a
commit 192e79d2ff
6 changed files with 54 additions and 9 deletions
@@ -11,7 +11,12 @@ using NzbDrone.Core.Tv;
namespace NzbDrone.Core.IndexerSearch
{
public class MissingEpisodeSearchService : IExecute<EpisodeSearchCommand>, IExecute<MissingEpisodeSearchCommand>
public interface IEpisodeSearchService
{
void MissingEpisodesAiredAfter(DateTime dateTime);
}
public class MissingEpisodeSearchService : IEpisodeSearchService, IExecute<EpisodeSearchCommand>, IExecute<MissingEpisodeSearchCommand>
{
private readonly ISearchForNzb _nzbSearchService;
private readonly IDownloadApprovedReports _downloadApprovedReports;
@@ -32,6 +37,26 @@ namespace NzbDrone.Core.IndexerSearch
_logger = logger;
}
public void MissingEpisodesAiredAfter(DateTime dateTime)
{
var missing = _episodeService.EpisodesBetweenDates(dateTime, DateTime.UtcNow)
.Where(e => !e.HasFile &&
!_queueService.GetQueue().Select(q => q.Episode.Id).Contains(e.Id))
.ToList();
var downloadedCount = 0;
_logger.Info("Searching for {0} missing episodes since last RSS Sync", missing.Count);
foreach (var episode in missing)
{
var decisions = _nzbSearchService.EpisodeSearch(episode);
var downloaded = _downloadApprovedReports.DownloadApproved(decisions);
downloadedCount += downloaded.Count;
}
_logger.ProgressInfo("Completed search for {0} episodes. {1} reports downloaded.", missing.Count, downloadedCount);
}
public void Execute(EpisodeSearchCommand message)
{
foreach (var episodeId in message.EpisodeIds)
@@ -57,9 +82,9 @@ namespace NzbDrone.Core.IndexerSearch
FilterExpression = v => v.Monitored == true && v.Series.Monitored == true
}).Records.ToList();
var missing = episodes.Where(e => !_queueService.GetQueue().Select(q => q.Episode.Id).Contains(e.Id));
var missing = episodes.Where(e => !_queueService.GetQueue().Select(q => q.Episode.Id).Contains(e.Id)).ToList();
_logger.ProgressInfo("Performing missing search for {0} episodes", episodes.Count);
_logger.ProgressInfo("Performing missing search for {0} episodes", missing.Count);
var downloadedCount = 0;
//Limit requests to indexers at 100 per minute
@@ -71,12 +96,10 @@ namespace NzbDrone.Core.IndexerSearch
var decisions = _nzbSearchService.EpisodeSearch(episode);
var downloaded = _downloadApprovedReports.DownloadApproved(decisions);
downloadedCount += downloaded.Count;
_logger.ProgressInfo("Episode search completed. {0} reports downloaded.", downloaded.Count);
}
}
_logger.ProgressInfo("Completed missing search for {0} episodes. {1} reports downloaded.", episodes.Count, downloadedCount);
_logger.ProgressInfo("Completed missing search for {0} episodes. {1} reports downloaded.", missing.Count, downloadedCount);
}
}
}