mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-25 22:36:59 -04:00
New: Automatic search for missing episodes if RSS Sync hasn't been run recently
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user