private List <DownloadDecision> SearchSingle(Series series, Episode episode) { var searchSpec = Get <SingleEpisodeSearchCriteria>(series, new List <Episode> { episode }); if (series.UseSceneNumbering) { if (episode.SceneSeasonNumber > 0 && episode.SceneEpisodeNumber > 0) { searchSpec.EpisodeNumber = episode.SceneEpisodeNumber; searchSpec.SeasonNumber = episode.SceneSeasonNumber; } else { searchSpec.EpisodeNumber = episode.EpisodeNumber; searchSpec.SeasonNumber = episode.SeasonNumber; } } else { searchSpec.EpisodeNumber = episode.EpisodeNumber; searchSpec.SeasonNumber = episode.SeasonNumber; } return(Dispatch(indexer => _feedFetcher.Fetch(indexer, searchSpec), searchSpec)); }
public List <DownloadDecision> SeasonSearch(int seriesId, int seasonNumber) { var series = _seriesService.GetSeries(seriesId); var episodes = _episodeService.GetEpisodesBySeason(seriesId, seasonNumber); if (series.SeriesType == SeriesTypes.Anime) { return(SearchAnimeSeason(series, episodes)); } if (seasonNumber == 0) { // search for special episodes in season 0 return(SearchSpecial(series, episodes)); } var downloadDecisions = new List <DownloadDecision>(); if (series.UseSceneNumbering) { var sceneSeasonGroups = episodes.GroupBy(v => { if (v.SceneSeasonNumber == 0 && v.SceneEpisodeNumber == 0) { return(v.SeasonNumber); } return(v.SceneSeasonNumber); }).Distinct(); foreach (var sceneSeasonEpisodes in sceneSeasonGroups) { if (sceneSeasonEpisodes.Count() == 1) { var episode = sceneSeasonEpisodes.First(); var searchSpec = Get <SingleEpisodeSearchCriteria>(series, sceneSeasonEpisodes.ToList()); searchSpec.SeasonNumber = sceneSeasonEpisodes.Key; if (episode.SceneSeasonNumber == 0 && episode.SceneEpisodeNumber == 0) { searchSpec.EpisodeNumber = episode.EpisodeNumber; } else { searchSpec.EpisodeNumber = episode.SceneEpisodeNumber; } var decisions = Dispatch(indexer => _feedFetcher.Fetch(indexer, searchSpec), searchSpec); downloadDecisions.AddRange(decisions); } else { var searchSpec = Get <SeasonSearchCriteria>(series, sceneSeasonEpisodes.ToList()); searchSpec.SeasonNumber = sceneSeasonEpisodes.Key; var decisions = Dispatch(indexer => _feedFetcher.Fetch(indexer, searchSpec), searchSpec); downloadDecisions.AddRange(decisions); } } } else { var searchSpec = Get <SeasonSearchCriteria>(series, episodes); searchSpec.SeasonNumber = seasonNumber; var decisions = Dispatch(indexer => _feedFetcher.Fetch(indexer, searchSpec), searchSpec); downloadDecisions.AddRange(decisions); } return(downloadDecisions); }