public override async Task <IEnumerable <ServerPackageMetadata> > Search(string searchTerm, SearchFilter filters, int skip, int take, CancellationToken cancellationToken) { return(await Task.Run(async() => { var query = _repository.Search( searchTerm, filters.SupportedFrameworks, filters.IncludePrerelease); // V2 sometimes requires that we also use an OData filter for latest/latest prerelease version if (filters.IncludePrerelease) { query = query.Where(p => p.IsAbsoluteLatestVersion); } else { query = query.Where(p => p.IsLatestVersion); } // execute the query List <IPackage> allPackages = query .Skip(skip) .Take(take) .ToList(); HashSet <string> seen = new HashSet <string>(StringComparer.OrdinalIgnoreCase); List <ServerPackageMetadata> results = new List <ServerPackageMetadata>(); foreach (var package in allPackages) { if (seen.Add(package.Id)) { var highest = allPackages.Where(p => StringComparer.OrdinalIgnoreCase.Equals(p.Id, package.Id)) .OrderByDescending(p => p.Version).First(); ServerPackageMetadata metadata = ParsePackageMetadataV2.Parse(highest); results.Add(metadata); } } return results; })); }
/// <summary> /// Parse a json package entry from search into a PowerShellSearchPackage /// </summary> private static PowerShellSearchPackage Parse(JObject json) { ServerPackageMetadata basePackage = PackageMetadataParser.ParseMetadata(json); PSPackageMetadata psMetadata = new PSPackageMetadata(basePackage.Id, basePackage.Version) { ModuleVersion = GetVersionOrNull(json, "ModuleVersion"), CLRVersion = GetVersionOrNull(json, "CLRVersion"), CmdletsToExport = GetStringArray(json, "CmdletsToExport"), CompanyName = GetStringOrNull(json, "CompanyName"), DotNetFrameworkVersion = GetVersionOrNull(json, "DotNetFrameworkVersion"), DscResourcesToExport = GetStringArray(json, "DscResourcesToExport"), FunctionsToExport = GetStringArray(json, "FunctionsToExport"), Guid = GetGuidOrEmpty(json, "GUID"), LicenseUrl = GetUriOrNull(json, "licenseUrl"), PowerShellHostVersion = GetVersionOrNull(json, "PowerShellHostVersion"), ProcessorArchitecture = GetStringOrNull(json, "ProcessorArchitecture"), ProjectUrl = GetUriOrNull(json, "projectUrl"), ReleaseNotes = GetStringOrNull(json, "releaseNotes") }; return(new PowerShellSearchPackage(basePackage, psMetadata)); }
public PowerShellSearchPackage(ServerPackageMetadata serverPackage, PSPackageMetadata powershellMetadata) : base(serverPackage.Id, serverPackage.Version) { _serverPackage = serverPackage; _powershellMetadata = powershellMetadata; }