public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteEpisode.Release.DownloadProtocol); return; } // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) { var uri = new Uri(remoteEpisode.Release.DownloadUrl); _rateLimitService.WaitAndPulse(uri.Host, TimeSpan.FromSeconds(2)); } var downloadClientId = downloadClient.Download(remoteEpisode); var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!String.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(); if (downloadClient == null) { _logger.Warn("Download client isn't configured yet."); return; } var downloadClientId = downloadClient.DownloadNzb(remoteEpisode); var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!String.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadClientId = downloadClientId; } _logger.ProgressInfo("Report sent to download client. {0}", downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteEpisode.Release.DownloadProtocol); return; } var downloadClientId = downloadClient.Download(remoteEpisode); var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!String.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to download client. {0}", downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteEpisode.Release.DownloadProtocol); return; } // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) { var uri = new Uri(remoteEpisode.Release.DownloadUrl); _rateLimitService.WaitAndPulse(uri.Host, TimeSpan.FromSeconds(2)); } var downloadClientId = downloadClient.Download(remoteEpisode); var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!String.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to download client. {0}", downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { throw new DownloadClientUnavailableException($"{remoteEpisode.Release.DownloadProtocol} Download client isn't configured yet"); } // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) { var url = new HttpUri(remoteEpisode.Release.DownloadUrl); _rateLimitService.WaitAndPulse(url.Host, TimeSpan.FromSeconds(2)); } string downloadClientId; try { downloadClientId = downloadClient.Download(remoteEpisode); _downloadClientStatusService.RecordSuccess(downloadClient.Definition.Id); _indexerStatusService.RecordSuccess(remoteEpisode.Release.IndexerId); } catch (ReleaseUnavailableException) { _logger.Trace("Release {0} no longer available on indexer.", remoteEpisode); throw; } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId); } throw; } var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void DownloadReport(RemoteEpisode remoteEpisode) { Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); var downloadTitle = remoteEpisode.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteEpisode.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteEpisode.Release.DownloadProtocol); return; } // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) { var uri = new Uri(remoteEpisode.Release.DownloadUrl); _rateLimitService.WaitAndPulse(uri.Host, TimeSpan.FromSeconds(2)); } string downloadClientId; try { downloadClientId = downloadClient.Download(remoteEpisode); _indexerStatusService.RecordSuccess(remoteEpisode.Release.IndexerId); } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteEpisode.Release.IndexerId); } throw; } var episodeGrabbedEvent = new EpisodeGrabbedEvent(remoteEpisode); episodeGrabbedEvent.DownloadClient = downloadClient.GetType().Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { episodeGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(episodeGrabbedEvent); }
public void Handle(EpisodeGrabbedEvent message) { ProcessTrackedDownloads(); }