2016-12-23 21:45:24 +00:00
|
|
|
|
using System.Linq;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
using NLog;
|
2014-07-23 23:43:54 +00:00
|
|
|
|
using NzbDrone.Common.Instrumentation.Extensions;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
using NzbDrone.Core.DecisionEngine;
|
|
|
|
|
using NzbDrone.Core.Download;
|
2014-06-08 08:22:55 +00:00
|
|
|
|
using NzbDrone.Core.Download.Pending;
|
2013-09-14 06:36:07 +00:00
|
|
|
|
using NzbDrone.Core.Messaging.Commands;
|
2014-06-08 08:22:55 +00:00
|
|
|
|
using NzbDrone.Core.Messaging.Events;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Indexers
|
|
|
|
|
{
|
2014-10-03 23:29:52 +00:00
|
|
|
|
public class RssSyncService : IExecute<RssSyncCommand>
|
2013-04-07 07:30:37 +00:00
|
|
|
|
{
|
2015-06-27 09:43:17 +00:00
|
|
|
|
private readonly IIndexerStatusService _indexerStatusService;
|
|
|
|
|
private readonly IIndexerFactory _indexerFactory;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
private readonly IFetchAndParseRss _rssFetcherAndParser;
|
|
|
|
|
private readonly IMakeDownloadDecision _downloadDecisionMaker;
|
2014-06-08 08:22:55 +00:00
|
|
|
|
private readonly IProcessDownloadDecisions _processDownloadDecisions;
|
|
|
|
|
private readonly IPendingReleaseService _pendingReleaseService;
|
|
|
|
|
private readonly IEventAggregator _eventAggregator;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
private readonly Logger _logger;
|
|
|
|
|
|
2015-06-27 09:43:17 +00:00
|
|
|
|
public RssSyncService(IIndexerStatusService indexerStatusService,
|
|
|
|
|
IIndexerFactory indexerFactory,
|
|
|
|
|
IFetchAndParseRss rssFetcherAndParser,
|
2013-06-19 02:08:29 +00:00
|
|
|
|
IMakeDownloadDecision downloadDecisionMaker,
|
2014-06-08 08:22:55 +00:00
|
|
|
|
IProcessDownloadDecisions processDownloadDecisions,
|
|
|
|
|
IPendingReleaseService pendingReleaseService,
|
|
|
|
|
IEventAggregator eventAggregator,
|
2013-06-19 02:08:29 +00:00
|
|
|
|
Logger logger)
|
2013-04-07 07:30:37 +00:00
|
|
|
|
{
|
2015-06-27 09:43:17 +00:00
|
|
|
|
_indexerStatusService = indexerStatusService;
|
|
|
|
|
_indexerFactory = indexerFactory;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
_rssFetcherAndParser = rssFetcherAndParser;
|
|
|
|
|
_downloadDecisionMaker = downloadDecisionMaker;
|
2014-06-08 08:22:55 +00:00
|
|
|
|
_processDownloadDecisions = processDownloadDecisions;
|
|
|
|
|
_pendingReleaseService = pendingReleaseService;
|
|
|
|
|
_eventAggregator = eventAggregator;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
_logger = logger;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-12-03 00:47:45 +00:00
|
|
|
|
private ProcessedDecisions Sync()
|
2013-04-07 07:30:37 +00:00
|
|
|
|
{
|
2013-09-11 06:33:47 +00:00
|
|
|
|
_logger.ProgressInfo("Starting RSS Sync");
|
2013-04-07 07:30:37 +00:00
|
|
|
|
|
2015-06-27 09:43:17 +00:00
|
|
|
|
var rssReleases = _rssFetcherAndParser.Fetch();
|
|
|
|
|
var pendingReleases = _pendingReleaseService.GetPending();
|
|
|
|
|
|
|
|
|
|
var reports = rssReleases.Concat(pendingReleases).ToList();
|
2013-04-23 06:14:55 +00:00
|
|
|
|
var decisions = _downloadDecisionMaker.GetRssDecision(reports);
|
2014-06-08 08:22:55 +00:00
|
|
|
|
var processed = _processDownloadDecisions.ProcessDecisions(decisions);
|
2013-04-07 07:30:37 +00:00
|
|
|
|
|
2015-10-03 17:45:26 +00:00
|
|
|
|
var message = string.Format("RSS Sync Completed. Reports found: {0}, Reports grabbed: {1}", reports.Count, processed.Grabbed.Count);
|
2014-04-28 06:12:28 +00:00
|
|
|
|
|
2014-06-08 08:22:55 +00:00
|
|
|
|
if (processed.Pending.Any())
|
|
|
|
|
{
|
|
|
|
|
message += ", Reports pending: " + processed.Pending.Count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_logger.ProgressInfo(message);
|
|
|
|
|
|
2014-12-03 00:47:45 +00:00
|
|
|
|
return processed;
|
2013-04-07 07:30:37 +00:00
|
|
|
|
}
|
2013-04-27 02:03:34 +00:00
|
|
|
|
|
|
|
|
|
public void Execute(RssSyncCommand message)
|
|
|
|
|
{
|
2014-06-08 08:22:55 +00:00
|
|
|
|
var processed = Sync();
|
2014-12-03 00:47:45 +00:00
|
|
|
|
var grabbedOrPending = processed.Grabbed.Concat(processed.Pending).ToList();
|
2014-04-12 20:49:41 +00:00
|
|
|
|
|
2014-12-03 00:47:45 +00:00
|
|
|
|
_eventAggregator.PublishEvent(new RssSyncCompleteEvent(processed));
|
2013-04-27 02:03:34 +00:00
|
|
|
|
}
|
2013-04-07 07:30:37 +00:00
|
|
|
|
}
|
2014-04-12 20:49:41 +00:00
|
|
|
|
}
|