public virtual bool IsSatisfiedBy(EpisodeParseResult subject) { var series = _seriesProvider.FindSeries(subject.CleanTitle); if (series == null) { logger.Trace("{0} is not mapped to any series in DB. skipping", subject.CleanTitle); return(false); } subject.Series = series; if (!series.Monitored) { logger.Debug("{0} is present in the DB but not tracked. skipping.", subject.CleanTitle); return(false); } var episodes = _episodeProvider.GetEpisodesByParseResult(subject); subject.Episodes = episodes; //return monitored if any of the episodes are monitored if (episodes.Any(episode => !episode.Ignored)) { return(true); } logger.Debug("All episodes are ignored. skipping."); return(false); }
public virtual SearchHistory ProcessReports(Series series, dynamic options, List <EpisodeParseResult> episodeParseResults, SearchHistory searchResult, ProgressNotification notification) { var items = new List <SearchHistoryItem>(); searchResult.Successes = new List <Int32>(); foreach (var episodeParseResult in episodeParseResults .OrderByDescending(c => c.Quality) .ThenBy(c => c.EpisodeNumbers.MinOrDefault()) .ThenBy(c => c.Age)) { try { var item = new SearchHistoryItem { ReportTitle = episodeParseResult.OriginalString, NzbUrl = episodeParseResult.NzbUrl, Indexer = episodeParseResult.Indexer, Quality = episodeParseResult.Quality.Quality, Proper = episodeParseResult.Quality.Proper, Size = episodeParseResult.Size, Age = episodeParseResult.Age, Language = episodeParseResult.Language }; items.Add(item); logger.Trace("Analysing report " + episodeParseResult); episodeParseResult.Series = _seriesProvider.FindSeries(episodeParseResult.CleanTitle); if (episodeParseResult.Series == null || episodeParseResult.Series.SeriesId != series.SeriesId) { item.SearchError = ReportRejectionType.WrongSeries; continue; } episodeParseResult.Episodes = _episodeProvider.GetEpisodesByParseResult(episodeParseResult); if (searchResult.Successes.Intersect(episodeParseResult.Episodes.Select(e => e.EpisodeId)).Any()) { item.SearchError = ReportRejectionType.Skipped; continue; } CheckReport(series, options, episodeParseResult, item); if (item.SearchError != ReportRejectionType.None) { continue; } item.SearchError = _allowedDownloadSpecification.IsSatisfiedBy(episodeParseResult); if (item.SearchError == ReportRejectionType.None) { if (DownloadReport(notification, episodeParseResult, item)) { searchResult.Successes.AddRange(episodeParseResult.Episodes.Select(e => e.EpisodeId)); } } } catch (Exception e) { logger.ErrorException("An error has occurred while processing parse result items from " + episodeParseResult, e); } } searchResult.SearchHistoryItems = items; return(searchResult); }