diff --git a/.vs/DataOrganizer/v16/.suo b/.vs/DataOrganizer/v16/.suo index 2e11118..c7570bd 100644 Binary files a/.vs/DataOrganizer/v16/.suo and b/.vs/DataOrganizer/v16/.suo differ diff --git a/DataOrganizer/FileViewer.cs b/DataOrganizer/FileViewer.cs index 3787f83..cc0591a 100644 --- a/DataOrganizer/FileViewer.cs +++ b/DataOrganizer/FileViewer.cs @@ -72,22 +72,12 @@ namespace DataOrganizer var files = db.GetFilesForProfileByFolderGroup(profile.Id, folderGroup.Id); ActiveSnapshotForPrimaryTree = new Snapshot(files, folderGroup); - if(ActiveSnapshotForPrimaryTree.Directories.ContainsKey(@"W:\Test\Amagi Brilliant Park\Season 1")) ActiveSnapshotForPrimaryTree.DeleteFolder(ActiveSnapshotForPrimaryTree.Directories[@"W:\Test\Amagi Brilliant Park\Season 1"]); + //if(ActiveSnapshotForPrimaryTree.Directories.ContainsKey(@"W:\Test\Amagi Brilliant Park\Season 1")) ActiveSnapshotForPrimaryTree.DeleteFolder(ActiveSnapshotForPrimaryTree.Directories[@"W:\Test\Amagi Brilliant Park\Season 1"]); foreach(var folder in ActiveSnapshotForPrimaryTree.Root.Folders) { PrimaryFilesTreeView.Nodes.Add(GetNodeFromSnapshot(folder)); } - - //var count = 1; - - //foreach(var file in ActiveSnapshotForPrimaryTree.FileDuplicates) - //{ - // PrimaryTreeNodes[file.Value.File.PathNoRoot].Text = $"{count} ) {file.Value.File.Name}"; - // PrimaryTreeNodes[file.Value.Duplicates[0].PathNoRoot].Text = $"{count} ) {file.Value.Duplicates[0].Name}"; - - // count++; - //} } private TreeNode GetNodeFromSnapshot(KeyValuePair folder) @@ -184,6 +174,10 @@ namespace DataOrganizer var newFiles = snapShot.Files.Values.Except(ActiveSnapshotForPrimaryTree.Files.Values); var existingFiles = ActiveSnapshotForPrimaryTree.Files.Values.Except(snapShot.Files.Values); var deletedFiles = new List(); + var modifiedFiles = new List(); + var newFilesCount = 0; + var modifiedFilesCount = 0; + var deletedFilesCount = 0; foreach(var existingFile in existingFiles) { @@ -196,62 +190,72 @@ namespace DataOrganizer else if (existingFile.ModifiedDate != snapShot.Files[existingFile.FullPath].ModifiedDate) { existingFile.ModifiedDate = snapShot.Files[existingFile.FullPath].ModifiedDate; + modifiedFiles.Add(snapShot.Files[existingFile.FullPath]); pendingChanges++; } } - pendingChanges += newFiles.Count(); - foreach(var f in newFiles) { - // AddNewFileToPrimaryTreeNode(f); + var newNode = new TreeNode(f.Name) { Name = f.FullPath, BackColor = Color.LightBlue, ToolTipText = "New File Found!" }; + var folders = ProcessFileFolders(f); + Folder previousFolder = null; + + foreach(var folder in folders) + { + var node = new TreeNode(folder.Name) { Name = folder.FullPath, BackColor = Color.LightBlue, ToolTipText = "New file found!" }; + + if (previousFolder == null && !PrimaryTreeNodes.ContainsKey(folder.FullPath)) PrimaryFilesTreeView.Nodes.Add(node); + + if (!PrimaryTreeNodes.ContainsKey(folder.FullPath)) + { + PrimaryTreeNodes.Add(folder.FullPath, node); + if (previousFolder != null) PrimaryTreeNodes[previousFolder.FullPath].Nodes.Add(node); + } + + previousFolder = folder; + } + + if (!PrimaryTreeNodes.ContainsKey(f.FullPath)) + { + PrimaryTreeNodes.Add(f.FullPath, newNode); + PrimaryTreeNodes[f.ParentFolder.FullPath].Nodes.Add(newNode); + newFilesCount++; + } } + foreach(var f in deletedFiles) + { + PrimaryTreeNodes[f.FullPath].BackColor = Color.Red; + PrimaryTreeNodes[f.FullPath].ToolTipText = "This file has been deleted."; + deletedFilesCount++; + } - //foreach (var file in rootFolder.EnumerateFiles()) - //{ - // if (!ActiveSnapshotForPrimaryTree.Files.ContainsKey(file.FullName)) - // { - // newFiles.Add(file); - // } - //} + foreach(var f in modifiedFiles) + { + PrimaryTreeNodes[f.FullPath].BackColor = Color.DarkBlue; + PrimaryTreeNodes[f.FullPath].ToolTipText = "This file has been modified."; + modifiedFilesCount++; + } - //foreach (var newFile in newFiles) - //{ - // var folders = newFile.DirectoryName.Split(new char[] { Path.DirectorySeparatorChar }); - // var currentPath = folderGroup.Path; - - // for(var i = rootDepth; i < folders.Length; i++) - // { - // var previousPath = currentPath; - // currentPath = Path.Combine(currentPath, folders[i]); - - // if(!PrimaryTreeNodes.ContainsKey(currentPath)) - // { - // var node = new TreeNode(folders[i]) { ForeColor = Color.Blue, ToolTipText = currentPath }; - // PrimaryTreeNodes[currentPath] = node; - // if (previousPath == folderGroup.Path) - // { - // PrimaryFilesTreeView.Nodes.Add(node); - // } - // else - // { - // PrimaryTreeNodes[previousPath].Nodes.Add(node); - // } - // } - // } - - // PrimaryTreeNodes[currentPath].Nodes.Add(new TreeNode(newFile.Name) { ForeColor = Color.Blue }); - //} - //WriteFilesToDb(folderGroup.Path); + label8.Text = $"New Files: {newFilesCount}{Environment.NewLine}Modified Files: {modifiedFilesCount}{Environment.NewLine}Deleted Files: {deletedFilesCount}"; } - private void AddNewFileToPrimaryTreeNode(List files) + private List ProcessFileFolders(FileSnapshot file) { - foreach(var file in files) - { + var folders = new List(); + Folder folder = file.ParentFolder; + var folderGroup = GetActiveFolderGroup(); + while(folder != null) + { + if(folder.FullPath != folderGroup.Path) folders.Add(folder); + folder = folder.Parent; } + + folders.Reverse(); + + return folders; } private List ScanDirectory(DirectoryInfo dir) diff --git a/DataOrganizer/Snapshot.cs b/DataOrganizer/Snapshot.cs index d66b1e3..f1699b3 100644 --- a/DataOrganizer/Snapshot.cs +++ b/DataOrganizer/Snapshot.cs @@ -161,15 +161,15 @@ namespace DataOrganizer Root.DeleteFolder(folder); folder.Parent.DeleteFolder(folder); - foreach (var file in folder.Files) - { - var f = Files.Remove(file.Key); - } - foreach (var dir in folder.Folders) ClearSubFolders(dir.Value); } + public void MergeSnapshot(Snapshot snapshot) + { + //TODO: build this out + } + public struct Duplicate { public DB.FileSnapshot File;