public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();
            var query            = new TorrentQuery();
            var tvdbId           = searchCriteria.TvdbId.GetValueOrDefault(0);
            var imdbId           = ParseUtil.GetImdbID(searchCriteria.ImdbId).GetValueOrDefault(0);

            if (searchCriteria.Categories?.Length > 0)
            {
                query.Category = Capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories).Select(int.Parse).ToArray();
            }

            if (tvdbId == 0 && imdbId == 0 && searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
            {
                query.Search = searchCriteria.SanitizedTvSearchString;
            }

            if (tvdbId != 0)
            {
                query.TvdbInfo         = query.TvdbInfo ?? new TvdbInfo();
                query.TvdbInfo.Id      = tvdbId;
                query.TvdbInfo.Season  = searchCriteria.Season;
                query.TvdbInfo.Episode = searchCriteria.Episode;
            }

            if (imdbId != 0)
            {
                query.ImdbInfo    = query.ImdbInfo ?? new ImdbInfo();
                query.ImdbInfo.Id = imdbId;
            }

            pageableRequests.Add(GetRequest(query));

            return(pageableRequests);
        }
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var capabilities = _capabilitiesProvider.GetCapabilities(Settings, Definition);

            var pageableRequests = new IndexerPageableRequestChain();
            var parameters       = new NameValueCollection();

            if (searchCriteria.TvdbId.HasValue && capabilities.TvSearchTvdbAvailable)
            {
                parameters.Add("tvdbid", searchCriteria.TvdbId.Value.ToString());
            }

            if (searchCriteria.ImdbId.IsNotNullOrWhiteSpace() && capabilities.TvSearchImdbAvailable)
            {
                parameters.Add("imdbid", searchCriteria.ImdbId);
            }

            if (searchCriteria.TvMazeId.HasValue && capabilities.TvSearchTvMazeAvailable)
            {
                parameters.Add("tvmazeid", searchCriteria.TvMazeId.ToString());
            }

            if (searchCriteria.RId.HasValue && capabilities.TvSearchTvRageAvailable)
            {
                parameters.Add("rid", searchCriteria.RId.ToString());
            }

            if (searchCriteria.Season.HasValue && capabilities.TvSearchSeasonAvailable)
            {
                parameters.Add("season", NewznabifySeasonNumber(searchCriteria.Season.Value));
            }

            if (searchCriteria.Episode.IsNotNullOrWhiteSpace() && capabilities.TvSearchEpAvailable)
            {
                parameters.Add("ep", searchCriteria.Episode);
            }

            //Workaround issue with Sphinx search returning garbage results on some indexers. If we don't use id parameters, fallback to t=search
            if (parameters.Count == 0)
            {
                searchCriteria.SearchType = "search";

                if (searchCriteria.SearchTerm.IsNotNullOrWhiteSpace() && capabilities.SearchAvailable)
                {
                    parameters.Add("q", NewsnabifyTitle(searchCriteria.SearchTerm));
                }
            }
            else
            {
                if (searchCriteria.SearchTerm.IsNotNullOrWhiteSpace() && capabilities.TvSearchAvailable)
                {
                    parameters.Add("q", NewsnabifyTitle(searchCriteria.SearchTerm));
                }
            }

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

            return(pageableRequests);
        }
예제 #3
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedTvSearchString), searchCriteria));
            return(pageableRequests);
        }
        public void SetUp()
        {
            Subject.Settings = new NewznabSettings()
            {
                BaseUrl = "http://127.0.0.1:1234/",
                ApiKey  = "abcd",
            };

            _movieSearchCriteria = new MovieSearchCriteria
            {
                SearchTerm = "Star Wars",
                Categories = new int[] { 2000 }
            };

            _tvSearchCriteria = new TvSearchCriteria
            {
                SearchTerm = "Star Wars",
                Categories = new int[] { 5000 },
                Season     = 0
            };

            _capabilities = new IndexerCapabilities();

            Mocker.GetMock <INewznabCapabilitiesProvider>()
            .Setup(v => v.GetCapabilities(It.IsAny <NewznabSettings>(), It.IsAny <IndexerDefinition>()))
            .Returns(_capabilities);
        }
예제 #5
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories, searchCriteria.FullImdbId));

            return(pageableRequests);
        }
예제 #6
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedTvSearchString), searchCriteria.Categories, searchCriteria.FullImdbId, 0, searchCriteria.TvdbId.GetValueOrDefault(0)));

            return(pageableRequests);
        }
예제 #7
0
        public override Task <IndexerPageableQueryResult> Fetch(TvSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(Task.FromResult(new IndexerPageableQueryResult()));
            }

            return(FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria)));
        }
예제 #8
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(searchCriteria.RssSearch
                ? GetRssRequest()
                : GetSearchRequests(searchCriteria.SanitizedTvSearchString));

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

            var parameters = new BroadcastheNetTorrentQuery();

            var searchString = searchCriteria.SearchTerm != null ? searchCriteria.SearchTerm : "";

            var btnResults = searchCriteria.Limit.GetValueOrDefault();

            if (btnResults == 0)
            {
                btnResults = (int)Capabilities.LimitsDefault;
            }

            var btnOffset = searchCriteria.Offset.GetValueOrDefault();

            if (searchCriteria.TvdbId > 0)
            {
                parameters.Tvdb = string.Format("{0}", searchCriteria.TvdbId);
            }

            if (searchCriteria.RId > 0)
            {
                parameters.Tvrage = string.Format("{0}", searchCriteria.RId);
            }

            // If only the season/episode is searched for then change format to match expected format
            if (searchCriteria.Season > 0 && searchCriteria.Episode.IsNullOrWhiteSpace())
            {
                // Season Only
                parameters.Name     = string.Format("Season {0}%", searchCriteria.Season.Value);
                parameters.Category = "Season";
            }
            else if (searchCriteria.Season > 0 && Regex.IsMatch(searchCriteria.EpisodeSearchString, "(\\d{4}\\.\\d{2}\\.\\d{2})"))
            {
                // Daily Episode
                parameters.Name     = searchCriteria.EpisodeSearchString;
                parameters.Category = "Episode";
            }
            else if (searchCriteria.Season > 0 && int.Parse(searchCriteria.Episode) > 0)
            {
                // Standard (S/E) Episode
                parameters.Name     = string.Format("S{0:00}E{1:00}", searchCriteria.Season.Value, int.Parse(searchCriteria.Episode));
                parameters.Category = "Episode";
            }

            // Neither a season only search nor daily nor standard, fall back to query
            parameters.Search = searchString.Replace(" ", "%");

            pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));

            return(pageableRequests);
        }
예제 #10
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.ImdbId.IsNotNullOrWhiteSpace())
            {
                pageableRequests.Add(GetRequest("search-torrents", searchCriteria.Categories, string.Format("&type=imdb&query={0}&season={1}&episode={2}", searchCriteria.FullImdbId, searchCriteria.Season, searchCriteria.Episode)));
            }
            else if (searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
            {
                var titleYearSearchQuery = string.Format("{0}", searchCriteria.SanitizedSearchTerm);
                pageableRequests.Add(GetRequest("search-torrents", searchCriteria.Categories, string.Format("&type=name&query={0}&season={1}&episode={2}", titleYearSearchQuery.Trim(), searchCriteria.Season, searchCriteria.Episode)));
            }
            else
            {
                pageableRequests.Add(GetRequest("latest-torrents", searchCriteria.Categories, ""));
            }

            return(pageableRequests);
        }
예제 #11
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var parameters = GetBasicSearchParameters(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories);

            if (searchCriteria.ImdbId != null)
            {
                if (ImdbInTags)
                {
                    parameters += string.Format("&taglist={0}", searchCriteria.FullImdbId);
                }
                else
                {
                    parameters += string.Format("&cataloguenumber={0}", searchCriteria.FullImdbId);
                }
            }

            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetRequest(parameters));
            return(pageableRequests);
        }
예제 #12
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var parameters = GetBasicSearchParameters(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories);

            if (searchCriteria.ImdbId != null)
            {
                parameters.Add("imdb", searchCriteria.ImdbId);
                parameters.Add("imdbId", searchCriteria.ImdbId);
            }

            if (searchCriteria.TvdbId > 0)
            {
                parameters.Add("tvdb", searchCriteria.TvdbId.ToString());
                parameters.Add("tvdbId", searchCriteria.TvdbId.ToString());
            }

            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetRequest(parameters));
            return(pageableRequests);
        }
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            _logger.Trace("Getting TV search");

            var pageableRequests = new IndexerPageableRequestChain();

            var variables = GetQueryVariableDefaults(searchCriteria);

            variables[".Query.Series"]      = null;
            variables[".Query.Ep"]          = searchCriteria.Episode;
            variables[".Query.Season"]      = searchCriteria.Season?.ToString() ?? null;
            variables[".Query.IMDBID"]      = searchCriteria.FullImdbId;
            variables[".Query.IMDBIDShort"] = searchCriteria.ImdbId;
            variables[".Query.TVDBID"]      = searchCriteria.TvdbId?.ToString() ?? null;
            variables[".Query.TVRageID"]    = searchCriteria.RId?.ToString() ?? null;
            variables[".Query.TVMazeID"]    = searchCriteria.TvMazeId?.ToString() ?? null;
            variables[".Query.TraktID"]     = searchCriteria.TraktId?.ToString() ?? null;
            variables[".Query.Episode"]     = searchCriteria.EpisodeSearchString;

            pageableRequests.Add(GetRequest(variables));

            return(pageableRequests);
        }
예제 #14
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var parameters = GetBasicSearchParameters(searchCriteria.Categories);

            if (searchCriteria.ImdbId.IsNotNullOrWhiteSpace())
            {
                parameters.Add("imdb", searchCriteria.FullImdbId);
                parameters.Add("search", GetSearchTerm(searchCriteria.EpisodeSearchString).Trim());
            }
            else if (searchCriteria.TvdbId.HasValue)
            {
                parameters.Add("tvdb", searchCriteria.TvdbId.Value.ToString());
                parameters.Add("search", GetSearchTerm(searchCriteria.EpisodeSearchString).Trim());
            }
            else
            {
                parameters.Add("search", GetSearchTerm(searchCriteria.SanitizedTvSearchString).Trim());
            }

            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetRequest(parameters));
            return(pageableRequests);
        }
 public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
 {
     return(new IndexerPageableRequestChain());
 }
예제 #16
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            return(pageableRequests);
        }
예제 #17
0
 public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
 {
     return(GetSearchRequestsCommon(searchCriteria,
                                    string.Format("{0}", searchCriteria.SanitizedTvSearchString)));
 }
예제 #18
0
        public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
        {
            var request = GetRequest(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories, searchCriteria.FullImdbId, tvdbId: searchCriteria.TvdbId);

            return(GetRequestChain(request, 2));
        }
예제 #19
0
 public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
 => GetRequestWithSearchType(searchCriteria, "anime");
예제 #20
0
 public abstract Task<IndexerPageableQueryResult> Fetch(TvSearchCriteria searchCriteria);
예제 #21
0
 public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
 {
     return(GetSearch(searchCriteria, searchCriteria.FullImdbId, searchCriteria.Season, searchCriteria.Episode));
 }
예제 #22
0
 public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
 => PerformRequest(searchCriteria);