public void Add(DownloadDecision decision, PendingReleaseReason reason) { var alreadyPending = _repository.AllBySeriesId(decision.RemoteEpisode.Series.Id); alreadyPending = IncludeRemoteEpisodes(alreadyPending); Add(alreadyPending, decision, reason); }
private void Insert(DownloadDecision decision, PendingReleaseReason reason) { _repository.Insert(new PendingRelease { ArtistId = decision.RemoteAlbum.Artist.Id, ParsedAlbumInfo = decision.RemoteAlbum.ParsedAlbumInfo, Release = decision.RemoteAlbum.Release, Title = decision.RemoteAlbum.Release.Title, Added = DateTime.UtcNow, Reason = reason }); _eventAggregator.PublishEvent(new PendingReleasesUpdatedEvent()); }
private void Insert(DownloadDecision decision, PendingReleaseReason reason) { _repository.Insert(new PendingRelease { SeriesId = decision.RemoteEpisode.Series.Id, ParsedEpisodeInfo = decision.RemoteEpisode.ParsedEpisodeInfo, Release = decision.RemoteEpisode.Release, Title = decision.RemoteEpisode.Release.Title, Added = DateTime.UtcNow, Reason = reason }); _eventAggregator.PublishEvent(new PendingReleasesUpdatedEvent()); }
private void Insert(DownloadDecision decision, PendingReleaseReason reason) { var release = new PendingRelease { MovieId = decision.RemoteMovie.Movie.Id, ParsedMovieInfo = decision.RemoteMovie.ParsedMovieInfo, Release = decision.RemoteMovie.Release, Title = decision.RemoteMovie.Release.Title, Added = DateTime.UtcNow, Reason = reason }; if (release.ParsedMovieInfo == null) { _logger.Warn("Pending release {0} does not have ParsedMovieInfo, will cause issues.", release.Title); } _repository.Insert(release); _eventAggregator.PublishEvent(new PendingReleasesUpdatedEvent()); }
public void Add(DownloadDecision decision, PendingReleaseReason reason) { var alreadyPending = GetPendingReleases(); var episodeIds = decision.RemoteEpisode.Episodes.Select(e => e.Id); var existingReports = alreadyPending.Where(r => r.RemoteEpisode.Episodes.Select(e => e.Id) .Intersect(episodeIds) .Any()); var matchingReports = existingReports.Where(MatchingReleasePredicate(decision.RemoteEpisode.Release)).ToList(); if (matchingReports.Any()) { var sameReason = true; foreach (var matchingReport in matchingReports) { if (matchingReport.Reason != reason) { _logger.Debug("The release {0} is already pending with reason {1}, changing to {2}", decision.RemoteEpisode, matchingReport.Reason, reason); matchingReport.Reason = reason; _repository.Update(matchingReport); sameReason = false; } } if (sameReason) { _logger.Debug("The release {0} is already pending with reason {1}, not adding again", decision.RemoteEpisode, reason); return; } } _logger.Debug("Adding release {0} to pending releases with reason {1}", decision.RemoteEpisode, reason); Insert(decision, reason); }
public void Add(DownloadDecision decision, PendingReleaseReason reason) { AddMany(new List <Tuple <DownloadDecision, PendingReleaseReason> > { Tuple.Create(decision, reason) }); }
private void GivenHeldRelease(string title, string indexer, DateTime publishDate, PendingReleaseReason reason = PendingReleaseReason.Delay) { var release = _release.JsonClone(); release.Indexer = indexer; release.PublishDate = publishDate; var heldReleases = Builder <PendingRelease> .CreateListOfSize(1) .All() .With(h => h.SeriesId = _series.Id) .With(h => h.Title = title) .With(h => h.Release = release) .With(h => h.Reason = reason) .Build(); _heldReleases.AddRange(heldReleases); }
private void PreparePending(List <Tuple <DownloadDecision, PendingReleaseReason> > queue, List <DownloadDecision> grabbed, List <DownloadDecision> pending, DownloadDecision report, PendingReleaseReason reason) { // If a release was already grabbed with matching episodes we should store it as a fallback // and filter it out the next time it is processed. // If a higher quality release failed to add to the download client, but a lower quality release // was sent to another client we still list it normally so it apparent that it'll grab next time. // Delayed is treated the same, but only the first is listed the subsequent items as stored as Fallback. if (IsEpisodeProcessed(grabbed, report) || IsEpisodeProcessed(pending, report)) { reason = PendingReleaseReason.Fallback; } queue.Add(Tuple.Create(report, reason)); pending.Add(report); }
private void Add(List <PendingRelease> alreadyPending, DownloadDecision decision, PendingReleaseReason reason) { var episodeIds = decision.RemoteEpisode.Episodes.Select(e => e.Id); var existingReports = alreadyPending.Where(r => r.RemoteEpisode.Episodes.Select(e => e.Id) .Intersect(episodeIds) .Any()); var matchingReports = existingReports.Where(MatchingReleasePredicate(decision.RemoteEpisode.Release)).ToList(); if (matchingReports.Any()) { var matchingReport = matchingReports.First(); if (matchingReport.Reason != reason) { _logger.Debug("The release {0} is already pending with reason {1}, changing to {2}", decision.RemoteEpisode, matchingReport.Reason, reason); matchingReport.Reason = reason; _repository.Update(matchingReport); } else { _logger.Debug("The release {0} is already pending with reason {1}, not adding again", decision.RemoteEpisode, reason); } if (matchingReports.Count() > 1) { _logger.Debug("The release {0} had {1} duplicate pending, removing duplicates.", decision.RemoteEpisode, matchingReports.Count() - 1); foreach (var duplicate in matchingReports.Skip(1)) { _repository.Delete(duplicate.Id); alreadyPending.Remove(duplicate); } } return; } _logger.Debug("Adding release {0} to pending releases with reason {1}", decision.RemoteEpisode, reason); Insert(decision, reason); }