private List <ReleaseResource> GetBookReleases(int bookId) { try { var decisions = _nzbSearchService.BookSearch(bookId, true, true, true); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(decisions); return(MapDecisions(prioritizedDecisions)); } catch (Exception ex) { _logger.Error(ex, "Book search failed"); throw new NzbDroneClientException(HttpStatusCode.InternalServerError, ex.Message); } }
private List <ReleaseResource> GetEpisodeReleases(int episodeId) { try { var decisions = _nzbSearchService.EpisodeSearch(episodeId); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(decisions); return(MapDecisions(prioritizedDecisions)); } catch (Exception ex) { _logger.ErrorException("Episode search failed: " + ex.Message, ex); } return(new List <ReleaseResource>()); }
private List <ReleaseResource> GetBookReleases(int bookId) { try { var decisions = _nzbSearchService.BookSearch(bookId, true, true, true); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(decisions); return(MapDecisions(prioritizedDecisions)); } catch (Exception ex) { _logger.Error(ex, "Book search failed"); } return(new List <ReleaseResource>()); }
private List <ReleaseResource> GetEpisodeReleases(int episodeId) { try { var decisions = _releaseSearchService.EpisodeSearch(episodeId, true, true); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(decisions); return(MapDecisions(prioritizedDecisions)); } catch (Exception ex) { _logger.Error(ex, "Episode search failed"); } return(new List <ReleaseResource>()); }
private List <ReleaseResource> GetEpisodeReleases(int episodeId) { try { var decisions = _nzbSearchService.EpisodeSearch(episodeId, true, true); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(decisions); return(MapDecisions(prioritizedDecisions)); } catch (SearchFailedException ex) { throw new NzbDroneClientException(HttpStatusCode.BadRequest, ex.Message); } catch (Exception ex) { _logger.Error(ex, "Episode search failed: " + ex.Message); throw new NzbDroneClientException(HttpStatusCode.InternalServerError, ex.Message); } }
public ProcessedDecisions ProcessDecisions(List <DownloadDecision> decisions) { var qualifiedReports = GetQualifiedReports(decisions); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(qualifiedReports); var grabbed = new List <DownloadDecision>(); var pending = new List <DownloadDecision>(); foreach (var report in prioritizedDecisions) { var remoteEpisode = report.RemoteEpisode; var episodeIds = remoteEpisode.Episodes.Select(e => e.Id).ToList(); //Skip if already grabbed if (grabbed.SelectMany(r => r.RemoteEpisode.Episodes) .Select(e => e.Id) .ToList() .Intersect(episodeIds) .Any()) { continue; } if (report.TemporarilyRejected) { _pendingReleaseService.Add(report); pending.Add(report); continue; } if (pending.SelectMany(r => r.RemoteEpisode.Episodes) .Select(e => e.Id) .ToList() .Intersect(episodeIds) .Any()) { continue; } try { _downloadService.DownloadReport(remoteEpisode); grabbed.Add(report); } catch (Exception e) { //TODO: support for store & forward //We'll need to differentiate between a download client error and an indexer error _logger.Warn(e, "Couldn't add report to download queue. " + remoteEpisode); } } return(new ProcessedDecisions(grabbed, pending, decisions.Where(d => d.Rejected).ToList())); }
public ProcessedDecisions ProcessDecisions(List <DownloadDecision> decisions) { var qualifiedReports = GetQualifiedReports(decisions); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(qualifiedReports); var grabbed = new List <DownloadDecision>(); var pending = new List <DownloadDecision>(); var failed = new List <DownloadDecision>(); var rejected = decisions.Where(d => d.Rejected).ToList(); var usenetFailed = false; var torrentFailed = false; foreach (var report in prioritizedDecisions) { var remoteEpisode = report.RemoteEpisode; var downloadProtocol = report.RemoteEpisode.Release.DownloadProtocol; // Skip if already grabbed if (IsEpisodeProcessed(grabbed, report)) { continue; } if (report.TemporarilyRejected) { _pendingReleaseService.Add(report, PendingReleaseReason.Delay); pending.Add(report); continue; } if (downloadProtocol == DownloadProtocol.Usenet && usenetFailed || downloadProtocol == DownloadProtocol.Torrent && torrentFailed) { failed.Add(report); continue; } try { _downloadService.DownloadReport(remoteEpisode); grabbed.Add(report); } catch (ReleaseUnavailableException) { _logger.Warn("Failed to download release from indexer, no longer available. " + remoteEpisode); rejected.Add(report); } catch (Exception ex) { if (ex is DownloadClientUnavailableException || ex is DownloadClientAuthenticationException) { _logger.Debug(ex, "Failed to send release to download client, storing until later. " + remoteEpisode); failed.Add(report); if (downloadProtocol == DownloadProtocol.Usenet) { usenetFailed = true; } else if (downloadProtocol == DownloadProtocol.Torrent) { torrentFailed = true; } } else { _logger.Warn(ex, "Couldn't add report to download queue. " + remoteEpisode); } } } pending.AddRange(ProcessFailedGrabs(grabbed, failed)); return(new ProcessedDecisions(grabbed, pending, rejected)); }
public ProcessedDecisions ProcessDecisions(List <DownloadDecision> decisions) { var qualifiedReports = GetQualifiedReports(decisions); var prioritizedDecisions = _prioritizeDownloadDecision.PrioritizeDecisions(qualifiedReports); var grabbed = new List <DownloadDecision>(); var pending = new List <DownloadDecision>(); //var failed = new List<DownloadDecision>(); var rejected = decisions.Where(d => d.Rejected).ToList(); var pendingAddQueue = new List <Tuple <DownloadDecision, PendingReleaseReason> >(); var usenetFailed = false; var torrentFailed = false; foreach (var report in prioritizedDecisions) { var remoteBook = report.RemoteBook; var downloadProtocol = report.RemoteBook.Release.DownloadProtocol; //Skip if already grabbed if (IsAlbumProcessed(grabbed, report)) { continue; } if (report.TemporarilyRejected) { PreparePending(pendingAddQueue, grabbed, pending, report, PendingReleaseReason.Delay); continue; } if ((downloadProtocol == DownloadProtocol.Usenet && usenetFailed) || (downloadProtocol == DownloadProtocol.Torrent && torrentFailed)) { PreparePending(pendingAddQueue, grabbed, pending, report, PendingReleaseReason.DownloadClientUnavailable); continue; } try { _logger.Trace("Grabbing from Indexer {0} at priority {1}.", remoteBook.Release.Indexer, remoteBook.Release.IndexerPriority); _downloadService.DownloadReport(remoteBook); grabbed.Add(report); } catch (ReleaseUnavailableException) { _logger.Warn("Failed to download release from indexer, no longer available. " + remoteBook); rejected.Add(report); } catch (Exception ex) { if (ex is DownloadClientUnavailableException || ex is DownloadClientAuthenticationException) { _logger.Debug(ex, "Failed to send release to download client, storing until later. " + remoteBook); PreparePending(pendingAddQueue, grabbed, pending, report, PendingReleaseReason.DownloadClientUnavailable); if (downloadProtocol == DownloadProtocol.Usenet) { usenetFailed = true; } else if (downloadProtocol == DownloadProtocol.Torrent) { torrentFailed = true; } } else { _logger.Warn(ex, "Couldn't add report to download queue. " + remoteBook); } } } if (pendingAddQueue.Any()) { _pendingReleaseService.AddMany(pendingAddQueue); } return(new ProcessedDecisions(grabbed, pending, rejected)); }