Example #1
0
        protected override async Task QueryAsync(IQuery query, CancellationToken ct)
        {
            var searchQuery = _queryParser.Bind(query.Argument, out var freeText);

            searchQuery.Site = Site;
            if (string.IsNullOrEmpty(searchQuery.InTitle))
            {
                searchQuery.InTitle = freeText;
            }
            var questions = await _stackExchangeClient.SearchAsync(searchQuery, ct);

            if (!questions.Any())
            {
                foreach (var queryResult in CreateFallbackResult(searchQuery))
                {
                    Available(queryResult);
                }
                return;
            }

            if (query is DefaultQuery)
            {
                questions = questions.Take(3).ToList();
            }

            foreach (var queryResult in questions.Select(q => ConvertQuestion(q, query)))
            {
                Available(queryResult);
            }
        }
Example #2
0
        public async Task <IEnumerable <QueryResult> > QueryAsync(Query query, CancellationToken ct)
        {
            var searchQuery = _queryParser.Bind(query.Argument, out var freeText);

            searchQuery.Site = Site;
            if (string.IsNullOrEmpty(searchQuery.InTitle))
            {
                searchQuery.InTitle = freeText;
            }
            var questions = await _stackExchangeClient.SearchAsync(searchQuery, ct);

            if (!questions.Any())
            {
                return(CreateFallbackResult(searchQuery));
            }
            return(questions.Select(question => ConvertQuestion(question, query)));
        }
Example #3
0
 public static TOption Bind <TOption>(this IQueryParser <TOption> parser, string query, out string unmatched) where TOption : new()
 {
     return(parser.Bind(query, out _, out unmatched));
 }