예제 #1
0
        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;
            }));
        }
예제 #2
0
        /// <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));
        }
예제 #3
0
 public PowerShellSearchPackage(ServerPackageMetadata serverPackage, PSPackageMetadata powershellMetadata)
     : base(serverPackage.Id, serverPackage.Version)
 {
     _serverPackage      = serverPackage;
     _powershellMetadata = powershellMetadata;
 }