Lidarr/src/NzbDrone.Core/Indexers/RssSyncService.cs

75 lines
3.0 KiB
C#
Raw Normal View History

2016-12-23 21:45:24 +00:00
using System.Linq;
2023-07-16 18:07:31 +00:00
using System.Threading.Tasks;
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;
using NzbDrone.Core.Download.Pending;
using NzbDrone.Core.Messaging.Commands;
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
{
private readonly IIndexerStatusService _indexerStatusService;
private readonly IIndexerFactory _indexerFactory;
2013-04-07 07:30:37 +00:00
private readonly IFetchAndParseRss _rssFetcherAndParser;
private readonly IMakeDownloadDecision _downloadDecisionMaker;
private readonly IProcessDownloadDecisions _processDownloadDecisions;
private readonly IPendingReleaseService _pendingReleaseService;
private readonly IEventAggregator _eventAggregator;
2013-04-07 07:30:37 +00:00
private readonly Logger _logger;
public RssSyncService(IIndexerStatusService indexerStatusService,
IIndexerFactory indexerFactory,
IFetchAndParseRss rssFetcherAndParser,
2013-06-19 02:08:29 +00:00
IMakeDownloadDecision downloadDecisionMaker,
IProcessDownloadDecisions processDownloadDecisions,
IPendingReleaseService pendingReleaseService,
IEventAggregator eventAggregator,
2013-06-19 02:08:29 +00:00
Logger logger)
2013-04-07 07:30:37 +00:00
{
_indexerStatusService = indexerStatusService;
_indexerFactory = indexerFactory;
2013-04-07 07:30:37 +00:00
_rssFetcherAndParser = rssFetcherAndParser;
_downloadDecisionMaker = downloadDecisionMaker;
_processDownloadDecisions = processDownloadDecisions;
_pendingReleaseService = pendingReleaseService;
_eventAggregator = eventAggregator;
2013-04-07 07:30:37 +00:00
_logger = logger;
}
2023-07-16 18:07:31 +00:00
private async Task<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
2023-07-16 18:07:31 +00:00
var rssReleases = await _rssFetcherAndParser.Fetch();
var pendingReleases = _pendingReleaseService.GetPending();
var reports = rssReleases.Concat(pendingReleases).ToList();
var decisions = _downloadDecisionMaker.GetRssDecision(reports);
2023-07-16 18:07:31 +00:00
var processed = await _processDownloadDecisions.ProcessDecisions(decisions);
2013-04-07 07:30:37 +00:00
var message = string.Format("RSS Sync Completed. Reports found: {0}, Reports grabbed: {1}", reports.Count, processed.Grabbed.Count);
if (processed.Pending.Any())
{
message += ", Reports pending: " + processed.Pending.Count;
}
_logger.ProgressInfo(message);
return processed;
2013-04-07 07:30:37 +00:00
}
public void Execute(RssSyncCommand message)
{
2023-07-16 18:07:31 +00:00
var processed = Sync().GetAwaiter().GetResult();
var grabbedOrPending = processed.Grabbed.Concat(processed.Pending).ToList();
_eventAggregator.PublishEvent(new RssSyncCompleteEvent(processed));
}
2013-04-07 07:30:37 +00:00
}
}