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("uid://cqc2xlt81ju8s"); private IdePackageResult? _selectedPackage; public override void _Ready() { _installedPackagesVboxContainer = GetNode("%InstalledPackagesVBoxContainer"); _implicitlyInstalledPackagesItemList = GetNode("%ImplicitlyInstalledPackagesVBoxContainer"); _availablePackagesItemList = GetNode("%AvailablePackagesVBoxContainer"); _packageDetailsVBoxContainer = GetNode("%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(); 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; } }