kinda working
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user