diff --git a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs index 66603a6..5fe1c8e 100644 --- a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs +++ b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs @@ -13,15 +13,14 @@ public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSe public class NugetClientService { private readonly bool _includePrerelease = false; + private readonly SourceCacheContext _sourceCacheContext = new SourceCacheContext(); + private readonly ILogger _nugetLogger = NullLogger.Instance; public async Task> GetTop100Results(string directoryPath, CancellationToken cancellationToken = default) { var settings = Settings.LoadDefaultSettings(root: directoryPath); var packageSourceProvider = new PackageSourceProvider(settings); var packageSources = packageSourceProvider.LoadPackageSources().Where(p => p.IsEnabled).ToList(); - var logger = NullLogger.Instance; - var cache = new SourceCacheContext(); - var packagesResult = new List(); foreach (var source in packageSources) @@ -38,7 +37,7 @@ public class NugetClientService filters: new SearchFilter(includePrerelease: _includePrerelease), skip: 0, take: 100, - log: logger, + log: _nugetLogger, cancellationToken: cancellationToken).ConfigureAwait(false); packagesResult.AddRange(results.Select(s => new IdePackageResult(s.Identity.Id, [new IdePackageFromSourceResult(s, source)]))); @@ -80,7 +79,7 @@ public class NugetClientService filters: new SearchFilter(includePrerelease: _includePrerelease), skip: 0, take: 2, - log: logger, + log: _nugetLogger, cancellationToken: cancellationToken).ConfigureAwait(false); var foundPackage = results.SingleOrDefault(r => r.Identity.Id.Equals(package.PackageId, StringComparison.OrdinalIgnoreCase)); if (foundPackage != null) @@ -92,4 +91,17 @@ public class NugetClientService return topPackages; } + + public async Task> GetAllVersionsOfPackageInSource(string packageId, PackageSource source, CancellationToken cancellationToken = default) + { + var repository = Repository.Factory.GetCoreV3(source); + var packageMetadataResource = await repository.GetResourceAsync(cancellationToken).ConfigureAwait(false); + + var metadata = await packageMetadataResource.GetMetadataAsync( + packageId, includePrerelease: _includePrerelease, includeUnlisted: false, + _sourceCacheContext, _nugetLogger, cancellationToken).ConfigureAwait(false); + + //var packageByIdResource = await repository.GetResourceAsync(cancellationToken).ConfigureAwait(false); + return metadata.ToList(); + } } diff --git a/src/SharpIDE.Application/Features/Nuget/NugetPackageIconCacheService.cs b/src/SharpIDE.Application/Features/Nuget/NugetPackageIconCacheService.cs index 484f299..4671d92 100644 --- a/src/SharpIDE.Application/Features/Nuget/NugetPackageIconCacheService.cs +++ b/src/SharpIDE.Application/Features/Nuget/NugetPackageIconCacheService.cs @@ -9,6 +9,7 @@ public class NugetPackageIconCacheService(IHttpClientFactory httpClientFactory) { private readonly IHttpClientFactory _httpClientFactory = httpClientFactory; + // TODO: Add an in memory cache public async Task<(byte[]? bytes, NugetPackageIconFormat?)> GetNugetPackageIcon(string packageId, Uri? iconUrl) { var appdataFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); diff --git a/src/SharpIDE.Godot/Features/Nuget/NugetPackageDetails.cs b/src/SharpIDE.Godot/Features/Nuget/NugetPackageDetails.cs index c667e6b..7b92aa9 100644 --- a/src/SharpIDE.Godot/Features/Nuget/NugetPackageDetails.cs +++ b/src/SharpIDE.Godot/Features/Nuget/NugetPackageDetails.cs @@ -7,18 +7,24 @@ public partial class NugetPackageDetails : VBoxContainer { private TextureRect _packageIconTextureRect = null!; private Label _packageNameLabel = null!; + private OptionButton _versionOptionButton = null!; + private OptionButton _nugetSourceOptionButton = null!; private IdePackageResult? _package; private readonly Texture2D _defaultIconTextureRect = ResourceLoader.Load("uid://b5ih61vdjv5e6"); [Inject] private readonly NugetPackageIconCacheService _nugetPackageIconCacheService = null!; + [Inject] private readonly NugetClientService _nugetClientService = null!; public override void _Ready() { _packageIconTextureRect = GetNode("%PackageIconTextureRect"); _packageNameLabel = GetNode