private TreeNode AddCompareNodes(TreeNode root, CrossCompareSet set, Func <CrossCompare, TreeNode> constructor) { // sort directories SortedList <string, TreeNode> duplicatePath = new SortedList <string, TreeNode>(); //new StringCompareSizeFirst() // sort filenames var nameFirst = set.ToArray(); Array.Sort(nameFirst, new CrossCompareNameFirst()); // create directory nodes foreach (var file in nameFirst) { var smallerPath = file.left.SmallerLocalPath(file.right); if (!duplicatePath.ContainsKey(smallerPath.localPath)) { var node = new TreeNode(smallerPath.localPath, 1, 1); node.ContextMenuStrip = rootNodeMenu; duplicatePath.Add(smallerPath.localPath, node); } } // add file nodes foreach (var file in nameFirst) { lock (unlisted) { unlisted.Remove(file.left); unlisted.Remove(file.right); } duplicatePath[file.left.SmallerLocalPath(file.right).localPath].Nodes.Add(constructor(file)); } // add directory nodes to the tree foreach (var node in duplicatePath) { root.Nodes.Add(node.Value); } return(root); }
private TreeNode AddInconsistencies(TreeNode root, CrossCompareSet duplicates, CrossCompareSet refactored, SortedSet <FileCompareData> empty) { var tasks = MultiTask.Run(new Func <TreeNode>[] { () => { return(AddDuplicates(new TreeNode("Left Duplicates", 1, 1), duplicates)); }, () => { return(AddRefactored(new TreeNode("Left Refactored", 1, 1), refactored)); }, () => { return(AddEmpty(new TreeNode("Left Empty", 1, 1), empty)); }, }); Task.WhenAll(tasks); foreach (var t in tasks) { var node = t.Result; if (node.Nodes.Count > 0) { root.Nodes.Add(t.Result); } } return(root); }
private TreeNode AddRefactored(TreeNode root, CrossCompareSet set) => AddCompareNodes(root, set, (CrossCompare compare) => { return(new RefactoredNode(compare, 4)); });
private TreeNode AddDuplicates(TreeNode root, CrossCompareSet set) => AddCompareNodes(root, set, (CrossCompare compare) => { return(new DuplicateNode(compare, 1)); });