From d544f13b4b3084c98352ae22215e08f4d23278d3 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Thu, 7 Aug 2025 18:37:34 +1000 Subject: [PATCH] Get flat project list --- .../VsPersistence/SharpIdeModels.cs | 1 + .../VsPersistence/VsPersistenceMapper.cs | 34 ++++++++++++------- .../Components/RunPanel.razor | 15 ++++++-- src/SharpIDE.Photino/Layout/MainLayout.razor | 2 +- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs index f9daf17..2c0eb6e 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs @@ -10,6 +10,7 @@ public class SharpIdeSolutionModel : ISharpIdeNode public required string FilePath { get; set; } public required List Projects { get; set; } public required List Folders { get; set; } + public required List AllProjects { get; set; } } public class SharpIdeSolutionFolder : ISharpIdeNode { diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs index e49697a..753bee6 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs @@ -12,39 +12,47 @@ public static class VsPersistenceMapper var intermediateModel = await IntermediateMapper.GetIntermediateModel(solutionFilePath, cancellationToken); var solutionName = Path.GetFileName(solutionFilePath); + var allProjects = new List(); 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 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 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 diff --git a/src/SharpIDE.Photino/Components/RunPanel.razor b/src/SharpIDE.Photino/Components/RunPanel.razor index b328bbb..7ef064f 100644 --- a/src/SharpIDE.Photino/Components/RunPanel.razor +++ b/src/SharpIDE.Photino/Components/RunPanel.razor @@ -1,8 +1,19 @@ - +@using SharpIDE.Application.Features.Run +@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence + +@inject RunService RunService + Run + @foreach(var projects in SolutionModel.AllProjects) + { + + @projects.Name + + } @code { - + [Parameter, EditorRequired] + public SharpIdeSolutionModel SolutionModel { get; set; } = null!; } diff --git a/src/SharpIDE.Photino/Layout/MainLayout.razor b/src/SharpIDE.Photino/Layout/MainLayout.razor index 4f78906..7beffd4 100644 --- a/src/SharpIDE.Photino/Layout/MainLayout.razor +++ b/src/SharpIDE.Photino/Layout/MainLayout.razor @@ -71,7 +71,7 @@ @if (_solutionFilePath is not null) { - +