Created
September 30, 2016 14:10
-
-
Save julesx/b81edbe007676ddc06d42d0e9837da7e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private readonly List<FolderVm> _folders = new List<FolderVm>(); | |
public void UpdateFolders(string path) | |
{ | |
var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(path)); | |
var iteratedDirectories = new Stack<DirectoryInfo>(); | |
iteratedDirectories.Push(directoryInfo); | |
while (directoryInfo != null) | |
{ | |
directoryInfo = Directory.GetParent(directoryInfo.FullName); | |
if (directoryInfo != null) | |
iteratedDirectories.Push(directoryInfo); | |
} | |
while (iteratedDirectories.Any()) | |
{ | |
var iteratedDirectory = iteratedDirectories.Pop(); | |
var parentDirectory = Directory.GetParent(iteratedDirectory.FullName); | |
if (parentDirectory == null && _folders.All(x => x.Path != iteratedDirectory.FullName)) | |
{ | |
_folders.Add(new FolderVm(iteratedDirectory.FullName)); | |
} | |
else if (parentDirectory != null) | |
{ | |
var parentDirectoryVm = GetParentDirectoryVm(_folders, parentDirectory.FullName); | |
if (parentDirectoryVm.Folders.All(x => x.Path != iteratedDirectory.FullName)) | |
{ | |
parentDirectoryVm.Folders.Add(new FolderVm(iteratedDirectory.FullName)); | |
} | |
} | |
} | |
} | |
private FolderVm GetParentDirectoryVm(IReadOnlyCollection<FolderVm> directories, string path) | |
{ | |
var parentDirectoryVm = directories.SingleOrDefault(x => x.Path == path); | |
if (parentDirectoryVm != null) | |
return parentDirectoryVm; | |
foreach (var directory in directories) | |
{ | |
parentDirectoryVm = GetParentDirectoryVm(directory.Folders, path); | |
if (parentDirectoryVm != null) | |
break; | |
} | |
return parentDirectoryVm; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment