Exemplo n.º 1
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
            {
                _logger.Debug("Indexer capabilities lacking season & ep query parameters, no Standard series search possible.");
            }

            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                        string.Format("&season={0}",
                                                      NewznabifySeasonNumber(searchCriteria.SeasonNumber)));
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}",
                                                       NewznabifySeasonNumber(searchCriteria.SeasonNumber)));
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}",
                                                       NewznabifySeasonNumber(searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
Exemplo n.º 2
0
        private IList <ReleaseInfo> Fetch(IIndexer indexer, SeasonSearchCriteria searchCriteria, int offset)
        {
            var searchUrls = indexer.GetSeasonSearchUrls(searchCriteria.QueryTitles, searchCriteria.Series.TvRageId, searchCriteria.SeasonNumber, offset).ToList();

            if (searchUrls.Any())
            {
                _logger.Debug("Searching for {0} offset: {1}", searchCriteria, offset);

                var result = Fetch(indexer, searchUrls);

                _logger.Info("{0} offset {1}. Found {2}", indexer, offset, result.Count);

                if (indexer.SupportsPaging && result.Count >= indexer.SupportedPageSize && offset < 900)
                {
                    result.AddRange(Fetch(indexer, searchCriteria, offset + indexer.SupportedPageSize));
                }

                //Only log finish for the first call to this recursive method
                if (offset == 0)
                {
                    _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);
                }

                return(result);
            }

            return(new List <ReleaseInfo>());
        }
Exemplo n.º 3
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                foreach (var seasonNumber in searchCriteria.Episodes.Select(v => v.SeasonNumber).Distinct())
                {
                    parameters.Category = "Season";
                    parameters.Name     = string.Format("Season {0}", seasonNumber);

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

                    parameters = parameters.Clone();

                    parameters.Category = "Episode";
                    parameters.Name     = string.Format("S{0:00}E%", seasonNumber);

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

            return(pageableRequests);
        }
Exemplo n.º 4
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                        string.Format("&season={0}",
                                                      searchCriteria.SeasonNumber));
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}",
                                                       searchCriteria.SeasonNumber));
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}",
                                                       searchCriteria.SeasonNumber));
            }

            return(pageableRequests);
        }
Exemplo n.º 5
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
            };
        }
Exemplo n.º 6
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            pageableRequests.AddIfNotNull(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}", searchCriteria.SeasonNumber));

            return(pageableRequests);
        }
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}", searchCriteria.SeasonNumber));

            return(pageableRequests);
        }
Exemplo n.º 8
0
        public override IList <ReleaseInfo> Fetch(SeasonSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            return(FetchReleases(g => g.GetSearchRequests(searchCriteria)));
        }
Exemplo n.º 9
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            AddTvIdPageableRequests(pageableRequests, MaxPages, Settings.Categories, searchCriteria,
                                    string.Format("&season={0}",
                                                  searchCriteria.SeasonNumber));

            return(pageableRequests);
        }
Exemplo n.º 10
0
        public IList <ReleaseInfo> Fetch(IIndexer indexer, SeasonSearchCriteria searchCriteria)
        {
            _logger.Debug("Searching for {0}", searchCriteria);

            var result = Fetch(indexer, searchCriteria, 0).DistinctBy(c => c.DownloadUrl).ToList();

            _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);

            return(result);
        }
Exemplo n.º 11
0
        public override IList <ReleaseInfo> Fetch(SeasonSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            var generator = GetRequestGenerator();

            return(FetchReleases(generator.GetSearchRequests(searchCriteria)));
        }
Exemplo n.º 12
0
        public IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}");

            pageableRequests.AddTier();

            AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}");

            return(pageableRequests);
        }
Exemplo n.º 13
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0)
            {
                var searchTitles = searchCriteria.CleanSceneTitles.SelectMany(v => GetSeasonSearchStrings(v, searchCriteria.SeasonNumber)).ToList();
                pageableRequests.Add(GetPagedRequests(string.Join("|", searchTitles)));
            }

            return(pageableRequests);
        }
Exemplo n.º 14
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.Add(GetPagedRequests(string.Format("{0}+S{1:00}",
                                                                    queryTitle,
                                                                    searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
Exemplo n.º 15
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(String.Format("{0}+S{1:00}",
                                                                             queryTitle,
                                                                             searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
Exemplo n.º 16
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(String.Format("/search/index.php?show_name={0}&season={1}&mode=rss",
                                                                             queryTitle,
                                                                             searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests(MaxPages,
                                                  series_id: searchCriteria.Series.TvdbId,
                                                  season: string.Format("Season {0:00}", searchCriteria.SeasonNumber)));

            pageableRequests.AddTier();

            // TODO: Search for all episodes?!?

            return(pageableRequests);
        }
Exemplo n.º 18
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0)
            {
                foreach (var queryTitle in searchCriteria.SceneTitles)
                {
                    var searchTitle = PrepareQuery(queryTitle);

                    pageableRequests.Add(GetPagedRequests(MaxPages, $"{searchTitle}+s{searchCriteria.SeasonNumber:00}"));
                }
            }

            return(pageableRequests);
        }
Exemplo n.º 19
0
        private IList <ReleaseInfo> Fetch(IIndexer indexer, SeasonSearchCriteria searchCriteria, int offset)
        {
            _logger.Debug("Searching for {0} offset: {1}", searchCriteria, offset);

            var searchUrls = indexer.GetSeasonSearchUrls(searchCriteria.QueryTitle, searchCriteria.Series.TvRageId, searchCriteria.SeasonNumber, offset);
            var result     = Fetch(indexer, searchUrls);


            _logger.Info("{0} offset {1}. Found {2}", indexer.Name, searchCriteria, result.Count);

            if (result.Count > 90)
            {
                result.AddRange(Fetch(indexer, searchCriteria, offset + 90));
            }

            return(result);
        }
Exemplo n.º 20
0
        public void should_only_include_reports_for_requested_episodes()
        {
            var series = Builder <Series> .CreateNew().Build();

            var episodes = Builder <Episode> .CreateListOfSize(2)
                           .All()
                           .With(v => v.SeriesId, series.Id)
                           .With(v => v.Series, series)
                           .With(v => v.SeasonNumber, 1)
                           .With(v => v.SceneSeasonNumber, 2)
                           .BuildList();

            var criteria = new SeasonSearchCriteria {
                Episodes = episodes.Take(1).ToList(), SeasonNumber = 1
            };

            var reports = episodes.Select(v =>
                                          new ReleaseInfo()
            {
                Title = string.Format("{0}.S{1:00}E{2:00}.720p.WEB-DL-DRONE", series.Title, v.SceneSeasonNumber, v.SceneEpisodeNumber)
            }).ToList();

            Mocker.GetMock <IParsingService>()
            .Setup(v => v.Map(It.IsAny <ParsedEpisodeInfo>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <SearchCriteriaBase>()))
            .Returns <ParsedEpisodeInfo, int, int, SearchCriteriaBase>((p, tvdbid, tvrageid, c) =>
                                                                       new RemoteEpisode
            {
                DownloadAllowed   = true,
                ParsedEpisodeInfo = p,
                Series            = series,
                Episodes          = episodes.Where(v => v.SceneEpisodeNumber == p.EpisodeNumbers.First()).ToList()
            });

            Mocker.SetConstant <IEnumerable <IDecisionEngineSpecification> >(new List <IDecisionEngineSpecification>
            {
                Mocker.Resolve <NzbDrone.Core.DecisionEngine.Specifications.Search.EpisodeRequestedSpecification>()
            });

            var decisions = Subject.GetSearchDecision(reports, criteria);

            var approvedDecisions = decisions.Where(v => v.Approved).ToList();

            approvedDecisions.Count.Should().Be(1);
        }
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, "usearch",
                                                               PrepareQuery(queryTitle),
                                                               "category:tv",
                                                               String.Format("season:{0}", searchCriteria.SeasonNumber)));

                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, "usearch",
                                                               PrepareQuery(queryTitle),
                                                               "category:tv",
                                                               String.Format("S{0:00}", searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
Exemplo n.º 22
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.Add(GetPagedRequests(MaxPages, "usearch",
                                                      PrepareQuery(queryTitle),
                                                      "category:tv",
                                                      string.Format("season:{0}", searchCriteria.SeasonNumber)));

                pageableRequests.Add(GetPagedRequests(MaxPages, "usearch",
                                                      PrepareQuery(queryTitle),
                                                      "category:tv",
                                                      string.Format("S{0:00}", searchCriteria.SeasonNumber)));
            }

            return(pageableRequests);
        }
Exemplo n.º 23
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var seasonNumber in searchCriteria.Episodes.Select(e => e.SeasonNumber).Distinct())
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season = seasonNumber;

                    pageableRequests.Add(GetRequest(query));
                }
            }

            return(pageableRequests);
        }
Exemplo n.º 24
0
        public IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var requests = new List <IEnumerable <IndexerRequest> >();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var seasonNumber in searchCriteria.Episodes.Select(e => e.SeasonNumber).Distinct())
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season = seasonNumber;

                    requests.Add(GetRequest(query));
                }
            }

            return(requests);
        }
Exemplo n.º 25
0
        public IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                var indexerRequests = new List <IndexerRequest>();

                var url = string.Format(BaseSearchUrl, string.Format("{0}+S{1:00}", queryTitle, searchCriteria.SeasonNumber));

                var requestBuilder = new HttpRequestBuilder(true, url, 443)
                {
                    NetworkCredential = new NetworkCredential(Settings.Username, Settings.Password)
                };

                var httpRequest = requestBuilder.Build();
                indexerRequests.Add(new IndexerRequest(httpRequest));
                pageableRequests.AddTier(indexerRequests);
            }

            return(pageableRequests);
        }
        public IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}");
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}");
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}");
            }

            return(pageableRequests);
        }
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequest = new List <IEnumerable <IndexerRequest> >();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                parameters.Category = "Episode";
                parameters.Name     = String.Format("S{0:00}E%", searchCriteria.SeasonNumber);

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

                parameters = parameters.Clone();

                parameters.Category = "Season";
                parameters.Name     = String.Format("Season {0}", searchCriteria.SeasonNumber);

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


            return(pageableRequest);
        }
Exemplo n.º 28
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SeasonSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            if (searchCriteria.Series.TvRageId > 0)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
                                                               String.Format("&rid={0}&season={1}",
                                                                             searchCriteria.Series.TvRageId,
                                                                             searchCriteria.SeasonNumber)));
            }
            else
            {
                foreach (var queryTitle in searchCriteria.QueryTitles)
                {
                    pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
                                                                   String.Format("&q={0}&season={1}",
                                                                                 NewsnabifyTitle(queryTitle),
                                                                                 searchCriteria.SeasonNumber)));
                }
            }

            return(pageableRequests);
        }
Exemplo n.º 29
0
 public IList <ReleaseInfo> Fetch(IIndexer indexer, SeasonSearchCriteria searchCriteria)
 {
     return(Fetch(indexer, searchCriteria, 0).DistinctBy(c => c.DownloadUrl).ToList());
 }
Exemplo n.º 30
0
 public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
 {
     return(new IndexerPageableRequestChain());
 }