Files
SharpIDE/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs
2025-11-01 21:54:19 +10:00

59 lines
2.2 KiB
C#

using Godot;
using SharpIDE.Application.Features.Nuget;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
namespace SharpIDE.Godot.Features.Nuget;
public partial class NugetPanel : Control
{
private VBoxContainer _installedPackagesVboxContainer = null!;
private VBoxContainer _implicitlyInstalledPackagesItemList = null!;
private VBoxContainer _availablePackagesItemList = null!;
private VBoxContainer _packageDetailsVBoxContainer = null!;
public SharpIdeSolutionModel? Solution { get; set; }
[Inject] private readonly NugetClientService _nugetClientService = null!;
private readonly PackedScene _packageEntryScene = ResourceLoader.Load<PackedScene>("uid://cqc2xlt81ju8s");
private IdePackageResult? _selectedPackage;
public override void _Ready()
{
_installedPackagesVboxContainer = GetNode<VBoxContainer>("%InstalledPackagesVBoxContainer");
_implicitlyInstalledPackagesItemList = GetNode<VBoxContainer>("%ImplicitlyInstalledPackagesVBoxContainer");
_availablePackagesItemList = GetNode<VBoxContainer>("%AvailablePackagesVBoxContainer");
_packageDetailsVBoxContainer = GetNode<VBoxContainer>("%PackageDetailsVBoxContainer");
_packageDetailsVBoxContainer.Visible = false;
_ = Task.GodotRun(async () =>
{
await Task.Delay(300);
var result = await _nugetClientService.GetTop100Results(Solution!.DirectoryPath);
;
await this.InvokeAsync(() => _availablePackagesItemList.QueueFreeChildren());
var scenes = result.Select(s =>
{
var scene = _packageEntryScene.Instantiate<PackageEntry>();
scene.PackageResult = s;
scene.PackageSelected += OnPackageSelected;
return scene;
}).ToList();
await this.InvokeAsync(() =>
{
foreach (var scene in scenes)
{
_availablePackagesItemList.AddChild(scene);
}
});
});
}
private void OnPackageSelected(IdePackageResult packageResult)
{
_selectedPackage = packageResult;
_packageDetailsVBoxContainer.Visible = true;
}
}