You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.3 KiB
87 lines
3.3 KiB
using NLog;
|
|
using NzbDrone.Core.IndexerSearch;
|
|
using NzbDrone.Core.MediaFiles.Events;
|
|
using NzbDrone.Core.Messaging.Commands;
|
|
using NzbDrone.Core.Messaging.Events;
|
|
using NzbDrone.Core.Tv.Events;
|
|
|
|
namespace NzbDrone.Core.Tv
|
|
{
|
|
public class SeriesScannedHandler : IHandle<SeriesScannedEvent>,
|
|
IHandle<SeriesScanSkippedEvent>
|
|
{
|
|
private readonly IEpisodeMonitoredService _episodeMonitoredService;
|
|
private readonly ISeriesService _seriesService;
|
|
private readonly IManageCommandQueue _commandQueueManager;
|
|
private readonly IEpisodeRefreshedService _episodeRefreshedService;
|
|
private readonly IEventAggregator _eventAggregator;
|
|
|
|
private readonly Logger _logger;
|
|
|
|
public SeriesScannedHandler(IEpisodeMonitoredService episodeMonitoredService,
|
|
ISeriesService seriesService,
|
|
IManageCommandQueue commandQueueManager,
|
|
IEpisodeRefreshedService episodeRefreshedService,
|
|
IEventAggregator eventAggregator,
|
|
Logger logger)
|
|
{
|
|
_episodeMonitoredService = episodeMonitoredService;
|
|
_seriesService = seriesService;
|
|
_commandQueueManager = commandQueueManager;
|
|
_episodeRefreshedService = episodeRefreshedService;
|
|
_eventAggregator = eventAggregator;
|
|
_logger = logger;
|
|
}
|
|
|
|
private void HandleScanEvents(Series series)
|
|
{
|
|
var addOptions = series.AddOptions;
|
|
|
|
if (addOptions == null)
|
|
{
|
|
_episodeRefreshedService.Search(series.Id);
|
|
return;
|
|
}
|
|
|
|
_logger.Info("[{0}] was recently added, performing post-add actions", series.Title);
|
|
_episodeMonitoredService.SetEpisodeMonitoredStatus(series, addOptions);
|
|
|
|
_eventAggregator.PublishEvent(new SeriesAddCompletedEvent(series));
|
|
|
|
// If both options are enabled search for the whole series, which will only include monitored episodes.
|
|
// This way multiple searches for the same season are skipped, though a season that can't be upgraded may be
|
|
// searched, but the logs will be more explicit.
|
|
|
|
if (addOptions.SearchForMissingEpisodes && addOptions.SearchForCutoffUnmetEpisodes)
|
|
{
|
|
_commandQueueManager.Push(new SeriesSearchCommand(series.Id));
|
|
}
|
|
else
|
|
{
|
|
if (series.AddOptions.SearchForMissingEpisodes)
|
|
{
|
|
_commandQueueManager.Push(new MissingEpisodeSearchCommand(series.Id));
|
|
}
|
|
|
|
if (series.AddOptions.SearchForCutoffUnmetEpisodes)
|
|
{
|
|
_commandQueueManager.Push(new CutoffUnmetEpisodeSearchCommand(series.Id));
|
|
}
|
|
}
|
|
|
|
series.AddOptions = null;
|
|
_seriesService.RemoveAddOptions(series);
|
|
}
|
|
|
|
public void Handle(SeriesScannedEvent message)
|
|
{
|
|
HandleScanEvents(message.Series);
|
|
}
|
|
|
|
public void Handle(SeriesScanSkippedEvent message)
|
|
{
|
|
HandleScanEvents(message.Series);
|
|
}
|
|
}
|
|
}
|