コード例 #1
0
        public async Task <BaseSearchResponse <Area> > SearchAsync(BasicSearchCriteria criteria)
        {
            var response = new BaseSearchResponse <Area>();

            if (criteria == null)
            {
                criteria = new BasicSearchCriteria();
            }

            var query = _context.Areas.Where(v => v.Status == ObjectStatus.Active);


            // filter by name of area
            if (!string.IsNullOrEmpty(criteria.Keyword))
            {
                query = query.Where(v => v.Name.Contains(criteria.Keyword));
            }

            response.Total = await query.CountAsync();

            // paging
            if (criteria.Page.HasValue && criteria.Length.HasValue && criteria.Page.Value > 0 && criteria.Length.Value > 0)
            {
                query = query.Skip(criteria.Length.Value * (criteria.Page.Value - 1)).Take(criteria.Length.Value);
            }


            var area = await query.ToListAsync();

            response.Items = area;

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

            pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria));
            return(pageableRequests);
        }
コード例 #3
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetRequest(searchCriteria.SanitizedSearchTerm));

            return(pageableRequests);
        }
コード例 #4
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            var parameters = GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories);

            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetRequest(parameters));
            return(pageableRequests);
        }
コード例 #5
0
        public override Task <IndexerPageableQueryResult> Fetch(BasicSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(Task.FromResult(new IndexerPageableQueryResult()));
            }

            return(FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria)));
        }
コード例 #6
0
        public async Task <BaseSearchResponse <CustomerViewModel> > Search([FromQuery] BasicSearchCriteria criteria)
        {
            var result = await _customerService.SearchAsync(criteria);

            return(new BaseSearchResponse <CustomerViewModel>
            {
                SearchAt = result.SearchAt,
                Total = result.Total,
                Items = result.Items.Select(i => i.ToViewModel()).ToList()
            });
        }
コード例 #7
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            _logger.Trace("Getting Basic search");

            var pageableRequests = new IndexerPageableRequestChain();

            var variables = GetQueryVariableDefaults(searchCriteria);

            pageableRequests.Add(GetRequest(variables));

            return(pageableRequests);
        }
コード例 #8
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            var capabilities     = _capabilitiesProvider.GetCapabilities(Settings, Definition);
            var pageableRequests = new IndexerPageableRequestChain();

            var parameters = new NameValueCollection();

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

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

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

            if (searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
            {
                var titleYearSearchQuery = string.Format("{0}", searchCriteria.SanitizedSearchTerm);
                pageableRequests.Add(GetRequest("search-torrents", searchCriteria.Categories, string.Format("&type=name&query={0}", titleYearSearchQuery.Trim())));
            }
            else
            {
                pageableRequests.Add(GetRequest("latest-torrents", searchCriteria.Categories, ""));
            }

            return(pageableRequests);
        }
コード例 #10
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();
            var query            = new TorrentQuery();

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

            if (searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
            {
                query.Search = searchCriteria.SanitizedSearchTerm;
            }

            pageableRequests.Add(GetRequest(query));

            return(pageableRequests);
        }
コード例 #11
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria 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;
            }

            parameters.Search = searchString.Replace(" ", "%");

            var btnOffset = searchCriteria.Offset.GetValueOrDefault();

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

            return(pageableRequests);
        }
コード例 #12
0
 public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
 {
     return(new IndexerPageableRequestChain());
 }
コード例 #13
0
ファイル: IndexerBase.cs プロジェクト: bakerboy448/Prowlarr
 public abstract Task<IndexerPageableQueryResult> Fetch(BasicSearchCriteria searchCriteria);
コード例 #14
0
        protected virtual async Task <ValidationFailure> TestConnection()
        {
            try
            {
                var parser = GetParser();
                parser.CookiesUpdater = (cookies, expiration) =>
                {
                    _indexerStatusService.UpdateCookies(Definition.Id, cookies, expiration);
                };

                var generator = GetRequestGenerator();

                generator = SetCookieFunctions(generator);

                var testCriteria = new BasicSearchCriteria {
                    SearchType = "search"
                };

                if (!SupportsRss)
                {
                    testCriteria.SearchTerm = "test";
                }

                var firstRequest = generator.GetSearchRequests(testCriteria).GetAllTiers().FirstOrDefault()?.FirstOrDefault();

                if (firstRequest == null)
                {
                    return(new ValidationFailure(string.Empty, "No rss feed query available. This may be an issue with the indexer or your indexer category settings."));
                }

                var releases = await FetchPage(firstRequest, parser);

                if (releases.Releases.Empty())
                {
                    return(new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings."));
                }
            }
            catch (IndexerAuthException ex)
            {
                _logger.Warn("Indexer returned result for RSS URL, Credentials appears to be invalid: " + ex.Message);

                return(new ValidationFailure("", ex.Message));
            }
            catch (RequestLimitReachedException ex)
            {
                _logger.Warn("Request limit reached: " + ex.Message);
            }
            catch (CloudFlareCaptchaException ex)
            {
                if (ex.IsExpired)
                {
                    return(new ValidationFailure("CaptchaToken", "CloudFlare CAPTCHA token expired, please Refresh."));
                }
                else
                {
                    return(new ValidationFailure("CaptchaToken", "Site protected by CloudFlare CAPTCHA. Valid CAPTCHA token required."));
                }
            }
            catch (UnsupportedFeedException ex)
            {
                _logger.Warn(ex, "Indexer feed is not supported");

                return(new ValidationFailure(string.Empty, "Indexer feed is not supported: " + ex.Message));
            }
            catch (IndexerException ex)
            {
                _logger.Warn(ex, "Unable to connect to indexer");

                return(new ValidationFailure(string.Empty, "Unable to connect to indexer. " + ex.Message));
            }
            catch (HttpException ex)
            {
                if (ex.Response.StatusCode == HttpStatusCode.BadRequest &&
                    ex.Response.Content.Contains("not support the requested query"))
                {
                    _logger.Warn(ex, "Indexer does not support the query");
                    return(new ValidationFailure(string.Empty, "Indexer does not support the current query. Check if the categories and or searching for movies are supported. Check the log for more details."));
                }
                else
                {
                    _logger.Warn(ex, "Unable to connect to indexer");

                    return(new ValidationFailure(string.Empty, "Unable to connect to indexer, check the log for more details"));
                }
            }
            catch (Exception ex)
            {
                _logger.Warn(ex, "Unable to connect to indexer");

                return(new ValidationFailure(string.Empty, "Unable to connect to indexer, check the log for more details"));
            }

            return(null);
        }
コード例 #15
0
 public Task <BaseSearchResponse <Supplier> > SearchAsync(BasicSearchCriteria criteria)
 {
     throw new NotImplementedException();
 }
コード例 #16
0
 public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
 {
     return(GetSearchRequestsCommon(searchCriteria, string.Format("{0}", searchCriteria.SanitizedSearchTerm)));
 }
コード例 #17
0
        public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
        {
            var request = GetRequest(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories);

            return(GetRequestChain(request, 2));
        }
コード例 #18
0
 public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
 => PerformRequest(searchCriteria);
コード例 #19
0
 public Task <BaseSearchResponse <Models.Type> > SearchAsync(BasicSearchCriteria criteria)
 {
     throw new NotImplementedException();
 }
コード例 #20
0
 public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
 => GetRequestWithSearchType(searchCriteria, "anime");