Esempio n. 1
0
        public void Add(DownloadDecision decision, PendingReleaseReason reason)
        {
            var alreadyPending = _repository.AllBySeriesId(decision.RemoteEpisode.Series.Id);

            alreadyPending = IncludeRemoteEpisodes(alreadyPending);

            Add(alreadyPending, decision, reason);
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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());
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public void Add(DownloadDecision decision, PendingReleaseReason reason)
 {
     AddMany(new List <Tuple <DownloadDecision, PendingReleaseReason> > {
         Tuple.Create(decision, reason)
     });
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }