public async Task<PackageSearchResults> Search(string query, PackageSearchOptions options, Uri source = null) { await this._progressService.StartLoading("Search"); if (string.IsNullOrWhiteSpace(query)) { this._progressService.WriteMessage("Loading data..."); } else { this._progressService.WriteMessage(string.Format("Searching for {0}", query)); } if (source == null) { source = new Uri(this._sourceService.GetDefaultSource().Url); } if (source.Scheme == "http" || source.Scheme == "https") { var results = await ODataPackageService.Search(query, this._packageFactory, options, source); await this._progressService.StopLoading(); return results; } if (source.IsFile || source.IsUnc) { await this._progressService.StopLoading(); return null; } throw new InvalidDataException("Invalid Source Uri. Double check that you current source is a valid endpoint."); }
public static async Task<PackageSearchResults> Search(string query, Func<IPackageViewModel> packageFactory, PackageSearchOptions options, Uri source) { var service = GetFeed(source); var queryString = query; IQueryable<V2FeedPackage> feedQuery = service.Packages.Where(package => package.IsPrerelease == options.IncludePrerelease || package.IsPrerelease == false); if (!options.IncludeAllVersions) { feedQuery = feedQuery.Where(package => package.IsLatestVersion || package.IsAbsoluteLatestVersion); } if (!string.IsNullOrWhiteSpace(queryString)) { feedQuery = options.MatchQuery ? feedQuery.Where(package => package.Id == queryString || package.Title == queryString) : feedQuery.Where(package => package.Id.Contains(queryString) || package.Title.Contains(queryString)); } var totalCount = feedQuery.Count(); if (!string.IsNullOrWhiteSpace(options.SortColumn)) { feedQuery = !options.SortDescending ? feedQuery.OrderBy(options.SortColumn) : feedQuery.OrderByDescending(options.SortColumn); } feedQuery = feedQuery.Skip(options.CurrentPage * options.PageSize).Take(options.PageSize); var feedDataServiceQuery = (DataServiceQuery<V2FeedPackage>)feedQuery; var result = await Task.Factory.FromAsync(feedDataServiceQuery.BeginExecute, ar => feedDataServiceQuery.EndExecute(ar), null); var packages = result.Select(package => AutoMapper.Mapper.Map(package, packageFactory())); return new PackageSearchResults { TotalCount = totalCount, Packages = packages }; }
private static string GetMemoryCacheKey(Uri source, string query, PackageSearchOptions options) { return string.Format(CultureInfo.CurrentCulture, "FileSystemPackageService.QueryResult.{0}|{1}|{2}|{3}", source, query, options.IncludeAllVersions, options.IncludePrerelease); }