public void DownloadReport(RemoteMovie remoteMovie, bool foceDownload = false) { //Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull(); //Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems(); TODO update this shit var downloadTitle = remoteMovie.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteMovie.Release.DownloadProtocol); if (downloadClient == null) { _logger.Warn("{0} Download client isn't configured yet.", remoteMovie.Release.DownloadProtocol); return; } // Limit grabs to 2 per second. if (remoteMovie.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteMovie.Release.DownloadUrl.StartsWith("magnet:")) { var url = new HttpUri(remoteMovie.Release.DownloadUrl); _rateLimitService.WaitAndPulse(url.Host, TimeSpan.FromSeconds(2)); } string downloadClientId = ""; try { downloadClientId = downloadClient.Download(remoteMovie); _indexerStatusService.RecordSuccess(remoteMovie.Release.IndexerId); } catch (NotImplementedException ex) { _logger.Error(ex, "The download client you are using is currently not configured to download movies. Please choose another one."); } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteMovie.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteMovie.Release.IndexerId); } throw; } var movieGrabbedEvent = new MovieGrabbedEvent(remoteMovie); movieGrabbedEvent.DownloadClient = downloadClient.Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { movieGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(movieGrabbedEvent); }
public void DownloadReport(RemoteMovie remoteMovie) { Ensure.That(remoteMovie.Movie, () => remoteMovie.Movie).IsNotNull(); var downloadTitle = remoteMovie.Release.Title; var downloadClient = _downloadClientProvider.GetDownloadClient(remoteMovie.Release.DownloadProtocol); if (downloadClient == null) { throw new DownloadClientUnavailableException($"{remoteMovie.Release.DownloadProtocol} Download client isn't configured yet"); } // Get the seed configuration for this release. remoteMovie.SeedConfiguration = _seedConfigProvider.GetSeedConfiguration(remoteMovie); // Limit grabs to 2 per second. if (remoteMovie.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteMovie.Release.DownloadUrl.StartsWith("magnet:")) { var url = new HttpUri(remoteMovie.Release.DownloadUrl); _rateLimitService.WaitAndPulse(url.Host, TimeSpan.FromSeconds(2)); } string downloadClientId; try { downloadClientId = downloadClient.Download(remoteMovie); _downloadClientStatusService.RecordSuccess(downloadClient.Definition.Id); _indexerStatusService.RecordSuccess(remoteMovie.Release.IndexerId); } catch (ReleaseUnavailableException) { _logger.Trace("Release {0} no longer available on indexer.", remoteMovie); throw; } catch (DownloadClientRejectedReleaseException) { _logger.Trace("Release {0} rejected by download client, possible duplicate.", remoteMovie); throw; } catch (ReleaseDownloadException ex) { var http429 = ex.InnerException as TooManyRequestsException; if (http429 != null) { _indexerStatusService.RecordFailure(remoteMovie.Release.IndexerId, http429.RetryAfter); } else { _indexerStatusService.RecordFailure(remoteMovie.Release.IndexerId); } throw; } var movieGrabbedEvent = new MovieGrabbedEvent(remoteMovie); movieGrabbedEvent.DownloadClient = downloadClient.Name; movieGrabbedEvent.DownloadClientId = downloadClient.Definition.Id; movieGrabbedEvent.DownloadClientName = downloadClient.Definition.Name; if (!string.IsNullOrWhiteSpace(downloadClientId)) { movieGrabbedEvent.DownloadId = downloadClientId; } _logger.ProgressInfo("Report sent to {0}. {1}", downloadClient.Definition.Name, downloadTitle); _eventAggregator.PublishEvent(movieGrabbedEvent); }