public void AllChildrenEnumeratedOnlyAfterAllSubDirsAllChildrenEnumerated() { DirectoryInfo dir = TargetDirectory.GetDirectories().First(); MakeSubDirs(dir); var node = new DirectoryNode(TargetDirectory, null); Assert.IsFalse(node.AllChildrenEnumerated); node.PopulateSubDirs(); Assert.IsFalse(node.AllChildrenEnumerated); foreach (var subDir in node.SubDirs) { subDir.PopulateSubDirs(); } Assert.IsFalse(node.AllChildrenEnumerated); foreach (var subDir in node.SubDirs) { foreach (var subSubDir in subDir.SubDirs) { subSubDir.PopulateSubDirs(); } } Assert.IsTrue(node.AllChildrenEnumerated); }
/// <summary> /// Delete every child under this directory and leave the directory itself alone. /// </summary> public void Empty() { foreach (var file in TargetDirectory.GetFiles()) { file.Delete(); } foreach (var directory in TargetDirectory.GetDirectories()) { directory.Delete(true); } }
public void PopulateSubDirs() { var node = new DirectoryNode(TargetDirectory, null); Assert.IsFalse(node.IsExpanded); node.PopulateSubDirs(); var expected = TargetDirectory.GetDirectories().Select(d => new DirectoryNode(d, node)); CollectionAssert.AreEquivalent(expected, node.SubDirs); Assert.IsTrue(node.ThisLevelEnumerated); }
public async Task <List <string> > GetExistingSongHashesAsync(bool hashExisting) { foreach (var songDir in TargetDirectory.GetDirectories()) { // Add missing directories to the Dictionary with an empty string for the hash value. if (!ExistingHashes.ContainsKey(songDir.FullName)) { ExistingHashes.Add(songDir.FullName, string.Empty); } } List <string> songsToHash; if (hashExisting) { songsToHash = ExistingHashes.Keys.ToList(); } else { songsToHash = ExistingHashes.Values.Where(hashData => string.IsNullOrEmpty(hashData)).ToList(); } await Task.Run(() => songsToHash.AsParallel().ForAll(h => { lock (_existingHashesLock) { if (ExistingHashes.ContainsKey(h)) { ExistingHashes[h] = GenerateHash(h); } else { ExistingHashes.Add(h, GenerateHash(h)); } } })).ConfigureAwait(false); return(ExistingHashes.Values.ToList()); }