diff --git a/src/NuGet.Clients/NuGet.PackageManagement.UI/PackageItemLoader.cs b/src/NuGet.Clients/NuGet.PackageManagement.UI/PackageItemLoader.cs index 2ac1f3fa6bc..09564c341e3 100644 --- a/src/NuGet.Clients/NuGet.PackageManagement.UI/PackageItemLoader.cs +++ b/src/NuGet.Clients/NuGet.PackageManagement.UI/PackageItemLoader.cs @@ -13,8 +13,8 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Threading; using NuGet.Common; +using NuGet.PackageManagement.UI.ViewModels; using NuGet.PackageManagement.VisualStudio; -using NuGet.Packaging.Core; using NuGet.Protocol.Core.Types; using NuGet.Versioning; using NuGet.VisualStudio; @@ -262,9 +262,9 @@ public IEnumerable GetCurrent() return Enumerable.Empty(); } - var listItemViewModels = new List(); + var listItemViewModels = new List(capacity: _state.ItemsCount); - foreach (PackageSearchMetadataContextInfo metadata in _state.Results.PackageSearchItems) + foreach (PackageSearchMetadataContextInfo metadataContextInfo in _state.Results.PackageSearchItems) { VersionRange allowedVersions = VersionRange.All; VersionRange versionOverride = null; @@ -272,7 +272,7 @@ public IEnumerable GetCurrent() // get the allowed version range and pass it to package item view model to choose the latest version based on that if (_packageReferences != null) { - IEnumerable matchedPackageReferences = _packageReferences.Where(r => StringComparer.OrdinalIgnoreCase.Equals(r.Identity.Id, metadata.Identity.Id)); + IEnumerable matchedPackageReferences = _packageReferences.Where(r => StringComparer.OrdinalIgnoreCase.Equals(r.Identity.Id, metadataContextInfo.Identity.Id)); VersionRange[] allowedVersionsRange = matchedPackageReferences.Select(r => r.AllowedVersions).Where(v => v != null).ToArray(); VersionRange[] versionOverrides = matchedPackageReferences.Select(r => r.VersionOverride).Where(v => v != null).ToArray(); @@ -287,30 +287,34 @@ public IEnumerable GetCurrent() } } - var packageLevel = metadata.TransitiveOrigins != null ? PackageLevel.Transitive : PackageLevel.TopLevel; + var packageLevel = metadataContextInfo.TransitiveOrigins != null ? PackageLevel.Transitive : PackageLevel.TopLevel; var transitiveToolTipMessage = string.Empty; if (packageLevel == PackageLevel.Transitive) { - transitiveToolTipMessage = string.Format(CultureInfo.CurrentCulture, Resources.PackageVersionWithTransitiveOrigins, metadata.Identity.Version, string.Join(", ", metadata.TransitiveOrigins)); + transitiveToolTipMessage = string.Format(CultureInfo.CurrentCulture, Resources.PackageVersionWithTransitiveOrigins, metadataContextInfo.Identity.Version, string.Join(", ", metadataContextInfo.TransitiveOrigins)); } + ImmutableList knownOwnerViewModels = LoadKnownOwnerViewModels(metadataContextInfo); + var listItem = new PackageItemViewModel(_searchService, _packageVulnerabilityService) { - Id = metadata.Identity.Id, - Version = metadata.Identity.Version, - IconUrl = metadata.IconUrl, - Author = metadata.Authors, - DownloadCount = metadata.DownloadCount, - Summary = metadata.Summary, + Id = metadataContextInfo.Identity.Id, + Version = metadataContextInfo.Identity.Version, + IconUrl = metadataContextInfo.IconUrl, + Owner = metadataContextInfo.Owners, + KnownOwnerViewModels = knownOwnerViewModels, + Author = metadataContextInfo.Authors, + DownloadCount = metadataContextInfo.DownloadCount, + Summary = metadataContextInfo.Summary, AllowedVersions = allowedVersions, VersionOverride = versionOverride, - PrefixReserved = metadata.PrefixReserved && !IsMultiSource, - Recommended = metadata.IsRecommended, - RecommenderVersion = metadata.RecommenderVersion, - Vulnerabilities = metadata.Vulnerabilities, + PrefixReserved = metadataContextInfo.PrefixReserved && !IsMultiSource, + Recommended = metadataContextInfo.IsRecommended, + RecommenderVersion = metadataContextInfo.RecommenderVersion, + Vulnerabilities = metadataContextInfo.Vulnerabilities, Sources = _packageSources, - PackagePath = metadata.PackagePath, + PackagePath = metadataContextInfo.PackagePath, PackageFileService = _packageFileService, IncludePrerelease = _includePrerelease, PackageLevel = packageLevel, @@ -323,7 +327,7 @@ public IEnumerable GetCurrent() } else { - listItem.UpdateTransitivePackageStatus(metadata.Identity.Version); + listItem.UpdateTransitivePackageStatus(metadataContextInfo.Identity.Version); } listItemViewModels.Add(listItem); @@ -332,18 +336,15 @@ public IEnumerable GetCurrent() return listItemViewModels.ToArray(); } - private async Task> GetVersionInfoAsync(PackageIdentity identity) + private static ImmutableList LoadKnownOwnerViewModels(PackageSearchMetadataContextInfo metadataContextInfo) { - Assumes.NotNull(identity); - - return await _searchService.GetPackageVersionsAsync(identity, _packageSources, _includePrerelease, CancellationToken.None); - } - - private async Task<(PackageSearchMetadataContextInfo, PackageDeprecationMetadataContextInfo)> GetDetailedPackageSearchMetadataContextInfoAsync(PackageIdentity identity) - { - Assumes.NotNull(identity); + ImmutableList knownOwnerViewModels = null; + if (metadataContextInfo.KnownOwners != null) + { + knownOwnerViewModels = metadataContextInfo.KnownOwners.Select(knownOwner => new KnownOwnerViewModel(knownOwner)).ToImmutableList(); + } - return await _searchService.GetPackageMetadataAsync(identity, _packageSources, _includePrerelease, CancellationToken.None); + return knownOwnerViewModels; } public void Dispose() diff --git a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.Designer.cs b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.Designer.cs index 6c414c0fc86..90b7640d75d 100644 --- a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.Designer.cs +++ b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.Designer.cs @@ -1853,6 +1853,15 @@ public static string Text_ApplyingConfigurationFiles_DocumentLink { } } + /// + /// Looks up a localized string similar to by. + /// + public static string Text_By { + get { + return ResourceManager.GetString("Text_By", resourceCulture); + } + } + /// /// Looks up a localized string similar to by {0}. /// @@ -1862,6 +1871,15 @@ public static string Text_ByAuthor { } } + /// + /// Looks up a localized string similar to by {0}. + /// + public static string Text_ByOwner { + get { + return ResourceManager.GetString("Text_ByOwner", resourceCulture); + } + } + /// /// Looks up a localized string similar to Visual Studio is about to make changes to this solution:. /// diff --git a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.resx b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.resx index 8d35a5b9690..8331fb7d290 100644 --- a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.resx +++ b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources.resx @@ -1042,4 +1042,10 @@ Please see https://aka.ms/troubleshoot_nuget_cache for more help. The package `{0}` is available in the Global packages folder, but the source it came from `{1}` is not one of the configured sources. {0} is the package ID. {1} is the URI of the package source found in the Global packages folder. + + by {0} + + + by + \ No newline at end of file diff --git a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources/Resources.xaml b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources/Resources.xaml index 704615cd0e3..c2b02634bbe 100644 --- a/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources/Resources.xaml +++ b/src/NuGet.Clients/NuGet.PackageManagement.UI/Resources/Resources.xaml @@ -23,6 +23,8 @@ x:Key="EmptyEnumerableToVisibilityConverter" /> + + +