Added the first stage of 'diffing' two snapshots. PrimaryFileTreeView now shows what files have been added, modified and deleted.

This commit is contained in:
Admin
2020-12-05 16:22:57 -06:00
parent 2d52886e87
commit 8a1be37434
3 changed files with 61 additions and 57 deletions
Binary file not shown.
+56 -52
View File
@@ -72,22 +72,12 @@ namespace DataOrganizer
var files = db.GetFilesForProfileByFolderGroup(profile.Id, folderGroup.Id); var files = db.GetFilesForProfileByFolderGroup(profile.Id, folderGroup.Id);
ActiveSnapshotForPrimaryTree = new Snapshot(files, folderGroup); 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) foreach(var folder in ActiveSnapshotForPrimaryTree.Root.Folders)
{ {
PrimaryFilesTreeView.Nodes.Add(GetNodeFromSnapshot(folder)); 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<string, Folder> folder) private TreeNode GetNodeFromSnapshot(KeyValuePair<string, Folder> folder)
@@ -184,6 +174,10 @@ namespace DataOrganizer
var newFiles = snapShot.Files.Values.Except(ActiveSnapshotForPrimaryTree.Files.Values); var newFiles = snapShot.Files.Values.Except(ActiveSnapshotForPrimaryTree.Files.Values);
var existingFiles = ActiveSnapshotForPrimaryTree.Files.Values.Except(snapShot.Files.Values); var existingFiles = ActiveSnapshotForPrimaryTree.Files.Values.Except(snapShot.Files.Values);
var deletedFiles = new List<FileSnapshot>(); var deletedFiles = new List<FileSnapshot>();
var modifiedFiles = new List<FileSnapshot>();
var newFilesCount = 0;
var modifiedFilesCount = 0;
var deletedFilesCount = 0;
foreach(var existingFile in existingFiles) foreach(var existingFile in existingFiles)
{ {
@@ -196,62 +190,72 @@ namespace DataOrganizer
else if (existingFile.ModifiedDate != snapShot.Files[existingFile.FullPath].ModifiedDate) else if (existingFile.ModifiedDate != snapShot.Files[existingFile.FullPath].ModifiedDate)
{ {
existingFile.ModifiedDate = snapShot.Files[existingFile.FullPath].ModifiedDate; existingFile.ModifiedDate = snapShot.Files[existingFile.FullPath].ModifiedDate;
modifiedFiles.Add(snapShot.Files[existingFile.FullPath]);
pendingChanges++; pendingChanges++;
} }
} }
pendingChanges += newFiles.Count();
foreach(var f in newFiles) 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()) foreach(var f in modifiedFiles)
//{ {
// if (!ActiveSnapshotForPrimaryTree.Files.ContainsKey(file.FullName)) PrimaryTreeNodes[f.FullPath].BackColor = Color.DarkBlue;
// { PrimaryTreeNodes[f.FullPath].ToolTipText = "This file has been modified.";
// newFiles.Add(file); modifiedFilesCount++;
// } }
//}
//foreach (var newFile in newFiles) label8.Text = $"New Files: {newFilesCount}{Environment.NewLine}Modified Files: {modifiedFilesCount}{Environment.NewLine}Deleted Files: {deletedFilesCount}";
//{
// 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);
} }
private void AddNewFileToPrimaryTreeNode(List<FileSnapshot> files) private List<Folder> ProcessFileFolders(FileSnapshot file)
{ {
foreach(var file in files) var folders = new List<Folder>();
{ 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<FileInfo> ScanDirectory(DirectoryInfo dir) private List<FileInfo> ScanDirectory(DirectoryInfo dir)
+5 -5
View File
@@ -161,15 +161,15 @@ namespace DataOrganizer
Root.DeleteFolder(folder); Root.DeleteFolder(folder);
folder.Parent.DeleteFolder(folder); folder.Parent.DeleteFolder(folder);
foreach (var file in folder.Files)
{
var f = Files.Remove(file.Key);
}
foreach (var dir in folder.Folders) foreach (var dir in folder.Folders)
ClearSubFolders(dir.Value); ClearSubFolders(dir.Value);
} }
public void MergeSnapshot(Snapshot snapshot)
{
//TODO: build this out
}
public struct Duplicate public struct Duplicate
{ {
public DB.FileSnapshot File; public DB.FileSnapshot File;