Пример #1
0
        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));
        }
Пример #2
0
        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);
        }