Get flat project list

This commit is contained in:
Matt Parker
2025-08-07 18:37:34 +10:00
parent 082a3a6bbf
commit d544f13b4b
4 changed files with 36 additions and 16 deletions

View File

@@ -10,6 +10,7 @@ public class SharpIdeSolutionModel : ISharpIdeNode
public required string FilePath { get; set; }
public required List<SharpIdeProjectModel> Projects { get; set; }
public required List<SharpIdeSolutionFolder> Folders { get; set; }
public required List<SharpIdeProjectModel> AllProjects { get; set; }
}
public class SharpIdeSolutionFolder : ISharpIdeNode
{

View File

@@ -12,39 +12,47 @@ public static class VsPersistenceMapper
var intermediateModel = await IntermediateMapper.GetIntermediateModel(solutionFilePath, cancellationToken);
var solutionName = Path.GetFileName(solutionFilePath);
var allProjects = new List<SharpIdeProjectModel>();
var solutionModel = new SharpIdeSolutionModel
{
Name = solutionName,
FilePath = solutionFilePath,
Projects = intermediateModel.Projects.Select(GetSharpIdeProjectModel).ToList(),
Projects = intermediateModel.Projects.Select(s => GetSharpIdeProjectModel(s, allProjects)).ToList(),
AllProjects = allProjects,
Folders = intermediateModel.SolutionFolders.Select(s => new SharpIdeSolutionFolder
{
Name = s.Model.Name,
Files = s.Files.Select(GetSharpIdeFile).ToList(),
Folders = s.Folders.Select(GetSharpIdeSolutionFolder).ToList(),
Projects = s.Projects.Select(GetSharpIdeProjectModel).ToList()
Folders = s.Folders.Select(x => GetSharpIdeSolutionFolder(x, allProjects)).ToList(),
Projects = s.Projects.Select(x => GetSharpIdeProjectModel(x, allProjects)).ToList()
}).ToList(),
};
timer.Stop();
Console.WriteLine($"Solution model fully created in {timer.ElapsedMilliseconds} ms");
return solutionModel;
}
private static SharpIdeProjectModel GetSharpIdeProjectModel(IntermediateProjectModel projectModel) => new SharpIdeProjectModel
private static SharpIdeProjectModel GetSharpIdeProjectModel(IntermediateProjectModel projectModel, List<SharpIdeProjectModel> allProjects)
{
Name = projectModel.Model.ActualDisplayName,
FilePath = projectModel.FullFilePath,
Files = TreeMapperV2.GetFiles(projectModel.FullFilePath),
Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath),
MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath)
};
var project = new SharpIdeProjectModel
{
Name = projectModel.Model.ActualDisplayName,
FilePath = projectModel.FullFilePath,
Files = TreeMapperV2.GetFiles(projectModel.FullFilePath),
Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath),
MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath)
};
allProjects.Add(project);
return project;
}
private static SharpIdeSolutionFolder GetSharpIdeSolutionFolder(IntermediateSlnFolderModel folderModel) => new SharpIdeSolutionFolder()
private static SharpIdeSolutionFolder GetSharpIdeSolutionFolder(IntermediateSlnFolderModel folderModel, List<SharpIdeProjectModel> allProjects) => new SharpIdeSolutionFolder()
{
Name = folderModel.Model.Name,
Files = folderModel.Files.Select(GetSharpIdeFile).ToList(),
Folders = folderModel.Folders.Select(GetSharpIdeSolutionFolder).ToList(),
Projects = folderModel.Projects.Select(GetSharpIdeProjectModel).ToList()
Folders = folderModel.Folders.Select(s => GetSharpIdeSolutionFolder(s, allProjects)).ToList(),
Projects = folderModel.Projects.Select(s => GetSharpIdeProjectModel(s, allProjects)).ToList()
};
private static SharpIdeFile GetSharpIdeFile(IntermediateSlnFolderFileModel fileModel) => new SharpIdeFile

View File

@@ -1,8 +1,19 @@
@using SharpIDE.Application.Features.Run
@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence
@inject RunService RunService
<MudStack Style="height: 100%">
<MudText>Run</MudText>
@foreach(var projects in SolutionModel.AllProjects)
{
<MudButton OnClick="@(async () => await RunService.RunProject(projects))" Variant="Variant.Filled" Color="Color.Primary" Style="margin: 4px;">
<MudText>@projects.Name</MudText>
</MudButton>
}
</MudStack>
@code {
[Parameter, EditorRequired]
public SharpIdeSolutionModel SolutionModel { get; set; } = null!;
}

View File

@@ -71,7 +71,7 @@
@if (_solutionFilePath is not null)
{
<DisplayNoneComponent Visible="@(_selectedBottomPanel is BottomPanelType.Run)">
<RunPanel />
<RunPanel SolutionModel="@_solutionModel" />
</DisplayNoneComponent>
<DisplayNoneComponent Visible="@(_selectedBottomPanel is BottomPanelType.Build)">
<TerminalOutputDisplay />