kinda working

This commit is contained in:
Matt Parker [SSW]
2025-01-10 19:56:26 +10:00
parent 614893bf1a
commit e53bde1776
3 changed files with 77 additions and 9 deletions

View File

@@ -3,8 +3,9 @@
public class Folder public class Folder
{ {
public required string Name { get; set; } public required string Name { get; set; }
public List<Folder> Folders { get; set; } = []; public required string FullName { get; set; }
public List<MyFile> Files { get; set; } = []; public required Folder? ParentFolder { get; set; }
public required List<MyFile> Files { get; set; } = [];
} }
public class MyFile public class MyFile

View File

@@ -37,4 +37,61 @@ public static class GetNodesInSolution
.ToList(); .ToList();
return files; return files;
} }
public static List<Folder> GetFoldersInProject(string projectPath)
{
var files = GetFilesInProject(projectPath);
var rootDirectoryOfProject = new DirectoryInfo(Path.GetDirectoryName(projectPath)!);
var grouped = files.GroupBy(s => s.Directory!.FullName);
var folders = grouped.Select(s => new Folder
{
Name = Path.GetFileName(s.Key),
FullName = s.Key,
ParentFolder = null,
Files = s.Select(f => new MyFile
{
Name = f.Name
}).ToList()
}).ToList();
foreach (var folder in folders)
{
var directoryInfo = new DirectoryInfo(folder.FullName);
if (directoryInfo.FullName == rootDirectoryOfProject.FullName) continue;
var parent = directoryInfo.Parent;
try
{
var parentFolder = folders.SingleOrDefault(f => f.FullName == parent!.FullName);
folder.ParentFolder = parentFolder;
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
return folders;
}
} }

View File

@@ -13,7 +13,7 @@
return; return;
} }
<MudTreeView T="ProjectInSolution"> <MudTreeView T="ProjectInSolution" Dense="true">
@foreach(var project in _rootNodes) @foreach(var project in _rootNodes)
{ {
@GetProjectFragment(project) @GetProjectFragment(project)
@@ -34,18 +34,23 @@
{ {
@GetProjectFragment(child) @GetProjectFragment(child)
} }
@GetFolderFragment(project) @GetFolderFragment(_folders.GetValueOrDefault(project.ProjectGuid, []))
</MudTreeViewItem> </MudTreeViewItem>
</text>; </text>;
private RenderFragment GetFolderFragment(ProjectInSolution project) => private RenderFragment GetFolderFragment(List<Folder> folders) =>
@<text> @<text>
@foreach (var folder in _folders.GetValueOrDefault(project.ProjectGuid, [])) @foreach (var folder in folders.Where(s => s.ParentFolder is null))
{ {
<MudTreeViewItem Value="folder" Text="@folder.Name"> <MudTreeViewItem T="ProjectInSolution" Text="@folder.Name">
@GetFolderFragment(folders.Where(s => s.ParentFolder == folder).ToList())
@foreach(var file in folder.Files)
{
<MudTreeViewItem T="ProjectInSolution" Text="@file.Name" />
}
</MudTreeViewItem> </MudTreeViewItem>
} }
</text>; </text>;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@@ -55,7 +60,12 @@
var rootNodes = solutionFile.ProjectsByGuid.Values.Where(p => p.ParentProjectGuid == null).OrderBy(s => s.ProjectName).ToList(); var rootNodes = solutionFile.ProjectsByGuid.Values.Where(p => p.ParentProjectGuid == null).OrderBy(s => s.ProjectName).ToList();
_rootNodes = rootNodes; _rootNodes = rootNodes;
var folders2 = _solutionFile.ProjectsByGuid.Values
.Where(s => s.ProjectType == SolutionProjectType.KnownToBeMSBuildFormat)
.Take(2)
.Select(s => (s, GetNodesInSolution.GetFoldersInProject(s.AbsolutePath)))
.ToDictionary(s => s.s.ProjectGuid, s => s.Item2);
_folders = folders2;
} }
} }