コード例 #1
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (SupportsSearch)
            {
                var queryTitles = (TextSearchEngine == "raw" ? searchCriteria.SceneTitles : searchCriteria.CleanSceneTitles);
                foreach (var queryTitle in queryTitles)
                {
                    pageableRequests.Add(GetPagedRequests(MaxPages, Settings.AnimeCategories, "search",
                                                          string.Format("&q={0}+{1:00}",
                                                                        NewsnabifyTitle(queryTitle),
                                                                        searchCriteria.AbsoluteEpisodeNumber)));

                    if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0 && searchCriteria.EpisodeNumber > 0)
                    {
                        pageableRequests.Add(GetPagedRequests(MaxPages, Settings.AnimeCategories, "search",
                                                              string.Format("&q={0}&season={1}&ep={2}",
                                                                            NewsnabifyTitle(queryTitle),
                                                                            searchCriteria.SeasonNumber,
                                                                            searchCriteria.EpisodeNumber)));
                    }
                }
            }

            return(pageableRequests);
        }
コード例 #2
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.SceneTitles)
            {
                var searchTitle = PrepareQuery(queryTitle);

                if (searchCriteria.AbsoluteEpisodeNumber > 0)
                {
                    pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+{searchCriteria.AbsoluteEpisodeNumber:0}"));

                    if (searchCriteria.AbsoluteEpisodeNumber < 10)
                    {
                        pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+{searchCriteria.AbsoluteEpisodeNumber:00}"));
                    }
                }

                if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0 && searchCriteria.EpisodeNumber > 0)
                {
                    pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+s{searchCriteria.SeasonNumber:00}e{searchCriteria.EpisodeNumber:00}"));
                }
            }

            return(pageableRequests);
        }
コード例 #3
0
        public void SetUp()
        {
            Subject.Settings = new FanzubSettings()
            {
                BaseUrl = "http://127.0.0.1:1234/",
            };

            _seasonSearchCriteria = new SeasonSearchCriteria()
            {
                SceneTitles = new List <string>()
                {
                    "Naruto Shippuuden"
                },
                SeasonNumber = 1,
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <string>()
                {
                    "Naruto Shippuuden"
                },
                AbsoluteEpisodeNumber = 9,
                SeasonNumber          = 1,
                EpisodeNumber         = 9
            };
        }
コード例 #4
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    parameters = parameters.Clone();

                    parameters.Category = "Episode";
                    parameters.Name     = string.Format("S{0:00}E{1:00}", episode.SeasonNumber, episode.EpisodeNumber);

                    pageableRequests.Add(GetPagedRequests(MaxPages, parameters));
                }

                foreach (var seasonNumber in searchCriteria.Episodes.Select(v => v.SeasonNumber).Distinct())
                {
                    parameters = parameters.Clone();

                    parameters.Category = "Season";
                    parameters.Name     = string.Format("Season {0}", seasonNumber);

                    pageableRequests.Add(GetPagedRequests(MaxPages, parameters));
                }
            }

            return(pageableRequests);
        }
コード例 #5
0
        public override IList <ReleaseInfo> Fetch(AnimeEpisodeSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            return(FetchReleases(g => g.GetSearchRequests(searchCriteria)));
        }
コード例 #6
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var searchTitles = searchCriteria.CleanSceneTitles.SelectMany(v => GetTitleSearchStrings(v, searchCriteria.AbsoluteEpisodeNumber)).ToList();

            pageableRequests.Add(GetPagedRequests(string.Join("|", searchTitles)));

            return(pageableRequests);
        }
コード例 #7
0
        private Decision IsSatisfiedBy(RemoteEpisode remoteEpisode, AnimeEpisodeSearchCriteria animeEpisodeSpec)
        {
            if (remoteEpisode.ParsedEpisodeInfo.FullSeason && !animeEpisodeSpec.IsSeasonSearch)
            {
                _logger.Debug("Full season result during single episode search, skipping.");
                return(Decision.Reject("Full season pack"));
            }

            return(Decision.Accept());
        }
コード例 #8
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            var searchTitles = searchCriteria.QueryTitles.SelectMany(v => GetTitleSearchStrings(v, searchCriteria.AbsoluteEpisodeNumber)).ToList();

            pageableRequests.Add(GetPagedRequests(String.Join("|", searchTitles)));

            return(pageableRequests);
        }
コード例 #9
0
ファイル: HttpIndexerBase.cs プロジェクト: ismell/Sonarr
        public override IList <ReleaseInfo> Fetch(AnimeEpisodeSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            var generator = GetRequestGenerator();

            return(FetchReleases(generator.GetSearchRequests(searchCriteria)));
        }
コード例 #10
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                var searchQuery = GetSearchQuery(queryTitle, searchCriteria.AbsoluteEpisodeNumber);

                pageableRequests.Add(GetPagedRequests(searchQuery));
            }

            return(pageableRequests);
        }
コード例 #11
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, Settings.AnimeCategories, "search",
                                                               String.Format("&q={0}+{1:00}",
                                                                             NewsnabifyTitle(queryTitle),
                                                                             searchCriteria.AbsoluteEpisodeNumber)));
            }

            return(pageableRequests);
        }
コード例 #12
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var searchTitles = searchCriteria.CleanSceneTitles.SelectMany(v => GetTitleSearchStrings(v, searchCriteria.AbsoluteEpisodeNumber)).ToList();

            if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0 && searchCriteria.EpisodeNumber > 0)
            {
                searchTitles.AddRange(searchCriteria.CleanSceneTitles.SelectMany(v => GetTitleSearchStrings(v, searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber)).ToList());
            }

            pageableRequests.Add(GetPagedRequests(string.Join("|", searchTitles)));

            return(pageableRequests);
        }
コード例 #13
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (SupportsSearch)
            {
                foreach (var queryTitle in searchCriteria.QueryTitles)
                {
                    pageableRequests.Add(GetPagedRequests(MaxPages, Settings.AnimeCategories, "search",
                                                          string.Format("&q={0}+{1:00}",
                                                                        NewsnabifyTitle(queryTitle),
                                                                        searchCriteria.AbsoluteEpisodeNumber)));
                }
            }

            return(pageableRequests);
        }
コード例 #14
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                var searchTitle = PrepareQuery(queryTitle);

                pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+{searchCriteria.AbsoluteEpisodeNumber:0}"));

                if (searchCriteria.AbsoluteEpisodeNumber < 10)
                {
                    pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+{searchCriteria.AbsoluteEpisodeNumber:00}"));
                }
            }

            return(pageableRequests);
        }
コード例 #15
0
        public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season  = episode.SeasonNumber;
                    query.TvdbInfo.Episode = episode.EpisodeNumber;
                }
            }

            return(pageableRequests);
        }
コード例 #16
0
        public void SetUp()
        {
            Subject.Settings = new NewznabSettings()
            {
                Url             = "http://127.0.0.1:1234/",
                Categories      = new [] { 1, 2 },
                AnimeCategories = new [] { 3, 4 },
                ApiKey          = "abcd",
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <String>()
                {
                    "Monkey+Island"
                },
                AbsoluteEpisodeNumber = 100
            };
        }
コード例 #17
0
        public IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var requests = new List <IEnumerable <IndexerRequest> >();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season  = episode.SeasonNumber;
                    query.TvdbInfo.Episode = episode.EpisodeNumber;
                }
            }

            return(requests);
        }
コード例 #18
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequest = new List <IEnumerable <IndexerRequest> >();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    parameters = parameters.Clone();

                    parameters.Category = "Episode";
                    parameters.Name     = String.Format("S{0:00}E{1:00}", episode.SeasonNumber, episode.EpisodeNumber);

                    pageableRequest.AddIfNotNull(GetPagedRequests(MaxPages, parameters));
                }
            }

            return(pageableRequest);
        }
コード例 #19
0
        public void SetUp()
        {
            UseRealHttp();

            _singleSearchCriteria = new SingleEpisodeSearchCriteria()
            {
                SceneTitles = new List <string> {
                    "Person of Interest"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 1
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <string> {
                    "Steins;Gate"
                },
                AbsoluteEpisodeNumber = 1
            };
        }
コード例 #20
0
        public void SetUp()
        {
            Subject.Settings = new NewznabSettings()
            {
                BaseUrl         = "http://127.0.0.1:1234/",
                Categories      = new [] { 1, 2 },
                AnimeCategories = new [] { 3, 4 },
                ApiKey          = "abcd",
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series = new Tv.Series {
                    TvRageId = 10, TvdbId = 20, TvMazeId = 30, ImdbId = "t40"
                },
                SceneTitles = new List <string> {
                    "Monkey Island"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 2
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <string>()
                {
                    "Monkey+Island"
                },
                AbsoluteEpisodeNumber = 100,
                SeasonNumber          = 5,
                EpisodeNumber         = 4
            };

            _capabilities = new NewznabCapabilities();

            Mocker.GetMock <INewznabCapabilitiesProvider>()
            .Setup(v => v.GetCapabilities(It.IsAny <NewznabSettings>()))
            .Returns(_capabilities);
        }
コード例 #21
0
        public void SetUp()
        {
            Subject.Settings = new TorznabSettings()
            {
                Url                = "http://127.0.0.1:1234/",
                Categories         = new [] { 1, 2 },
                AnimeCategories    = new [] { 3, 4 },
                ApiKey             = "abcd",
                EnableRageIDLookup = true
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series = new Tv.Series {
                    TvRageId = 10
                },
                SceneTitles = new List <string> {
                    "Monkey Island"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 2
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <String>()
                {
                    "Monkey+Island"
                },
                AbsoluteEpisodeNumber = 100
            };

            _capabilities = new TorznabCapabilities();

            Mocker.GetMock <ITorznabCapabilitiesProvider>()
            .Setup(v => v.GetCapabilities(It.IsAny <TorznabSettings>()))
            .Returns(_capabilities);
        }
コード例 #22
0
        public IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            // FileList has absolute releases in E01 format but also release sin S01E01 format, likely by imdb numbering but we only have tvdb numbering... so we try those as fallback to abs.
            AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.AnimeCategories, $"&season=0&episode={searchCriteria.AbsoluteEpisodeNumber}");
            pageableRequests.AddTier();
            foreach (var eps in searchCriteria.Episodes)
            {
                AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.AnimeCategories, $"&season={eps.SeasonNumber}&episode={eps.EpisodeNumber}");
            }

            pageableRequests.AddTier();

            AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.AnimeCategories, $"&season=0&episode={searchCriteria.AbsoluteEpisodeNumber}");
            pageableRequests.AddTier();
            foreach (var eps in searchCriteria.Episodes)
            {
                AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.AnimeCategories, $"&season={eps.SeasonNumber}&episode={eps.EpisodeNumber}");
            }

            return(pageableRequests);
        }
コード例 #23
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                var searchTitle = PrepareQuery(queryTitle);

                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages,
                                                               String.Format("&term={0}+{1:0}",
                                                                             searchTitle,
                                                                             searchCriteria.AbsoluteEpisodeNumber)));

                if (searchCriteria.AbsoluteEpisodeNumber < 10)
                {
                    pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages,
                                                                   String.Format("&term={0}+{1:00}",
                                                                                 searchTitle,
                                                                                 searchCriteria.AbsoluteEpisodeNumber)));
                }
            }

            return(pageableRequests);
        }
コード例 #24
0
 public IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
 {
     throw new NotImplementedException();
 }
コード例 #25
0
        public IList <ReleaseInfo> Fetch(IIndexer indexer, AnimeEpisodeSearchCriteria searchCriteria)
        {
            var searchUrls = indexer.GetAnimeEpisodeSearchUrls(searchCriteria.SceneTitles, searchCriteria.Series.TvRageId, searchCriteria.AbsoluteEpisodeNumber).ToList();

            return(Fetch(indexer, searchUrls, searchCriteria));
        }
コード例 #26
0
 public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
 {
     return(new IndexerPageableRequestChain());
 }
コード例 #27
0
ファイル: IndexerBase.cs プロジェクト: Macharr/Macharr
 public abstract IList <ReleaseInfo> Fetch(AnimeEpisodeSearchCriteria searchCriteria);
コード例 #28
0
 public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
 {
     return(new List <IEnumerable <IndexerRequest> >());
 }