Beispiel #1
0
        async Task <T[]> _GetEventsAsync()
        {
            var query = new Dictionary <string, string>();

            query["q"] = "*";
            if (_pattern != null)
            {
                query["q"] = _pattern(default(FilteredEvents.Event))._pattern;
            }

            if (_timeRange != null)
            {
                var t = _timeRange(default(DatedEvents.Event));
                if (t._start != default(DateTimeOffset))
                {
                    query["from"] = t._start.ToString("yyyy-MM-dd HH:mm:ss.fffzzzz");
                }
                if (t._end != default(DateTimeOffset))
                {
                    query["until"] = t._end.ToString("yyyy-MM-dd HH:mm:ss.fffzzzz");
                }
            }

            if (!_descending)
            {
                query["order"] = "asc";
            }

            if (_selector != null) // should never be null
            {
                var fields = Fields.Collect(_selector.Body);
                if (fields != null)
                {
                    query["fields"] = string.Join(",", fields);
                }
            }

            if (_skip > 0)
            {
                query["start"] = _skip.ToString();
            }

            if (_take > 0 && _take != 10)
            {
                query["rows"] = _take.ToString();
            }

            var queryString = string.Join("&", query.Select(kv => string.Format("{0}={1}", kv.Key, kv.Value)));

            var response = await _client.GetAsync(string.Format("search?{0}", queryString));

            if (response.IsSuccessStatusCode)
            {
                var results = await response.Content.ReadAsStringAsync();

                var raw       = SearchResults.Parse(results);
                var transform = _selector.Compile();
                return(raw.Select(transform).ToArray());
            }
            else
            {
                return(new T[] {});
            }
        }