mirror of https://github.com/Sonarr/Sonarr
90 lines
3.0 KiB
C#
90 lines
3.0 KiB
C#
using System.Collections.Generic;
|
|
using NzbDrone.Api.Mapping;
|
|
using NzbDrone.Core.DecisionEngine;
|
|
using NzbDrone.Core.Download;
|
|
using NzbDrone.Core.IndexerSearch;
|
|
using NzbDrone.Core.Indexers;
|
|
using NzbDrone.Core.Parser;
|
|
using NzbDrone.Core.Parser.Model;
|
|
using Omu.ValueInjecter;
|
|
using System.Linq;
|
|
|
|
namespace NzbDrone.Api.Indexers
|
|
{
|
|
public class ReleaseModule : NzbDroneRestModule<ReleaseResource>
|
|
{
|
|
private readonly IFetchAndParseRss _rssFetcherAndParser;
|
|
private readonly ISearchForNzb _nzbSearchService;
|
|
private readonly IMakeDownloadDecision _downloadDecisionMaker;
|
|
private readonly IDownloadService _downloadService;
|
|
private readonly IParsingService _parsingService;
|
|
|
|
public ReleaseModule(IFetchAndParseRss rssFetcherAndParser,
|
|
ISearchForNzb nzbSearchService,
|
|
IMakeDownloadDecision downloadDecisionMaker,
|
|
IDownloadService downloadService,
|
|
IParsingService parsingService)
|
|
{
|
|
_rssFetcherAndParser = rssFetcherAndParser;
|
|
_nzbSearchService = nzbSearchService;
|
|
_downloadDecisionMaker = downloadDecisionMaker;
|
|
_downloadService = downloadService;
|
|
_parsingService = parsingService;
|
|
GetResourceAll = GetReleases;
|
|
CreateResource = DownloadRelease;
|
|
}
|
|
|
|
private ReleaseResource DownloadRelease(ReleaseResource release)
|
|
{
|
|
var remoteEpisode = _parsingService.Map(release.InjectTo<ParsedEpisodeInfo>());
|
|
remoteEpisode.Report = release.InjectTo<ReportInfo>();
|
|
|
|
_downloadService.DownloadReport(remoteEpisode);
|
|
|
|
return release;
|
|
}
|
|
|
|
private List<ReleaseResource> GetReleases()
|
|
{
|
|
if (Request.Query.episodeId != null)
|
|
{
|
|
return GetEpisodeReleases(Request.Query.episodeId);
|
|
}
|
|
|
|
return GetRss();
|
|
}
|
|
|
|
private List<ReleaseResource> GetEpisodeReleases(int episodeId)
|
|
{
|
|
var decisions = _nzbSearchService.EpisodeSearch(episodeId);
|
|
return MapDecisions(decisions);
|
|
}
|
|
|
|
private List<ReleaseResource> GetRss()
|
|
{
|
|
var reports = _rssFetcherAndParser.Fetch();
|
|
var decisions = _downloadDecisionMaker.GetRssDecision(reports);
|
|
|
|
return MapDecisions(decisions);
|
|
}
|
|
|
|
private static List<ReleaseResource> MapDecisions(IEnumerable<DownloadDecision> decisions)
|
|
{
|
|
var result = new List<ReleaseResource>();
|
|
|
|
foreach (var downloadDecision in decisions)
|
|
{
|
|
var release = new ReleaseResource();
|
|
|
|
release.InjectFrom(downloadDecision.RemoteEpisode.Report);
|
|
release.InjectFrom(downloadDecision.RemoteEpisode.ParsedEpisodeInfo);
|
|
release.InjectFrom(downloadDecision);
|
|
release.Rejections = downloadDecision.Rejections.ToList();
|
|
|
|
result.Add(release);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
} |