private SearchCountriesRequest CreateSearchRequest(string text) { SearchCountriesRequest request; if (!_searchResultsCache.TryGetValue(text, out request)) { IList <Country> source; if (_lastSearchRequest != null && text.IndexOf(_lastSearchRequest.Text, StringComparison.OrdinalIgnoreCase) != -1) { source = _lastSearchRequest.Source; } else { _source = _source ?? CountryUtils.CountriesSource; source = _source; } request = new SearchCountriesRequest(text, source); } return(request); }
private void SearchInternal(string text) { if (_lastSearchRequest != null) { _lastSearchRequest.Cancel(); } if (string.IsNullOrEmpty(text)) { LazySearchItems.Clear(); SearchItems.Clear(); foreach (var contact in _source) { SearchItems.Add(contact); } return; } var nextSearchRequest = CreateSearchRequest(text); IsWorking = true; nextSearchRequest.ProcessAsync(results => Execute.BeginOnUIThread(() => { if (nextSearchRequest.IsCanceled) { return; } SearchItems.Clear(); LazySearchItems.Clear(); for (var i = 0; i < results.Count; i++) { if (i < 8) { SearchItems.Add(results[i]); } else { LazySearchItems.Add(results[i]); } } IsWorking = false; Status = Items.Count == 0 ? AppResources.NoResults : string.Empty; Telegram.Api.Helpers.Execute.BeginOnUIThread(() => { if (!String.Equals(text, Text, StringComparison.OrdinalIgnoreCase)) { return; } foreach (var lazySearchItem in LazySearchItems) { SearchItems.Add(lazySearchItem); } LazySearchItems.Clear(); }); })); _searchResultsCache[nextSearchRequest.Text] = nextSearchRequest; _lastSearchRequest = nextSearchRequest; }