Added the first stage of 'diffing' two snapshots. PrimaryFileTreeView now shows what files have been added, modified and deleted.
This commit is contained in:
Binary file not shown.
+56
-52
@@ -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<string, Folder> 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<FileSnapshot>();
|
||||
var modifiedFiles = new List<FileSnapshot>();
|
||||
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<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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user