@ -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 ) ;
}
}
}