public void Start(ProgressNotification notification, dynamic options) { var missingEpisodes = GetMissingForEnabledSeries().GroupBy(e => new { e.SeriesId, e.SeasonNumber }); var individualEpisodes = new List <Episode>(); Logger.Trace("Processing missing episodes list"); foreach (var group in missingEpisodes) { var count = group.Count(); if (count == 1) { individualEpisodes.Add(group.First()); } else { //Get count and compare to the actual number of episodes for this season //If numbers don't match then add to individual episodes, else process as full season... var seriesId = group.Key.SeriesId; var seasonNumber = group.Key.SeasonNumber; var countInDb = _episodeProvider.GetEpisodeNumbersBySeason(seriesId, seasonNumber).Count; //Todo: Download a full season if more than n% is missing? if (count != countInDb) { //Add the episodes to be processed manually individualEpisodes.AddRange(group); } else { //Process as a full season Logger.Debug("Processing Full Season: {0} Season {1}", seriesId, seasonNumber); _seasonSearchJob.Start(notification, new { SeriesId = seriesId, SeasonNumber = seasonNumber }); } } } Logger.Debug("Processing standalone episodes"); //Process the list of remaining episodes, 1 by 1 foreach (var episode in individualEpisodes) { _episodeSearchJob.Start(notification, new { EpisodeId = episode.EpisodeId }); } }
public void Start(ProgressNotification notification, dynamic options) { if (options == null || options.SeriesId <= 0) { throw new ArgumentException("options.SeriesId"); } logger.Debug("Getting seasons from database for series: {0}", options.SeriesId); IList <int> seasons = _seasonProvider.GetSeasons(options.SeriesId); foreach (var season in seasons.Where(s => s > 0)) { if (!_seasonProvider.IsIgnored(options.SeriesId, season)) { _seasonSearchJob.Start(notification, new { SeriesId = options.SeriesId, SeasonNumber = season }); } } }