Updated the FileManager to reflect more where I think I want to go when comparing snapshots. Added a first try at detecting file renames in the Snapshot object.

This commit is contained in:
Admin
2020-12-11 17:32:28 -06:00
parent 864a3dfdb6
commit 06b586d635
5 changed files with 189 additions and 18 deletions
+79 -1
View File
@@ -4,7 +4,7 @@ using System.ComponentModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -15,6 +15,8 @@ namespace DataOrganizer
private List<DB.Profile> Profiles { get; set; } = new List<DB.Profile>();
private List<DB.FolderGroup> FolderGroups { get; set; } = new List<DB.FolderGroup>();
private Snapshot ActiveSnapshot { get; set; }
private Snapshot ComparisionSnapshot { get; set; }
private Dictionary<string, TreeNode> DiffTreeNodes { get; set; } = new Dictionary<string, TreeNode>();
public FileManager()
{
@@ -26,10 +28,25 @@ namespace DataOrganizer
CompareAgainstProfileComboBox.SelectedIndexChanged += CompareAgainstProfileComboBox_SelectedIndexChanged;
CompareAgainstFolderGroupComboBox.SelectedIndexChanged += CompareAgainstFolderGroupComboBox_SelectedIndexChanged;
CompareButton.Click += CompareButton_Click;
DiffViewTreeView.NodeMouseClick += DiffViewTreeView_NodeMouseClick;
PopulateProfileComboBox();
}
private void DiffViewTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (!ActiveSnapshot.TopLevelFolders.ContainsKey(e.Node.Name)) return;
SelectedFolderViewGroupTreeView.Nodes.Clear();
ComparisionFolderViewTreeView.Nodes.Clear();
var folderA = ActiveSnapshot.Directories[e.Node.Name];
var folderB = ComparisionSnapshot.Directories[e.Node.Name];
SelectedFolderViewGroupTreeView.Nodes.Add(BuildTreeNode(folderA));
ComparisionFolderViewTreeView.Nodes.Add(BuildTreeNode(folderB));
}
private void ScanSelectedFolderGroupButton_Click(object sender, EventArgs e)
{
var folderGroup = GetSelectedFolderGroup();
@@ -43,12 +60,16 @@ namespace DataOrganizer
MoveNewFilesButton.Enabled = true;
if (ActiveSnapshot.Files.Count == 0) CommitFirstTimeScaneToDatabase(snapshot);
//TODO: reload the form to have these changes active in the global snapshot
}
private void CommitFirstTimeScaneToDatabase(Snapshot snapshot)
{
var db = new DB();
db.InsertNewFileRecord(snapshot.Files.Values.ToList(), GetSelectedProfile().Id, GetSelectedFolderGroup().Id, GetSelectedFolderGroup().Path);
ClearForm();
UpdateStatusLabel($"Committed {snapshot.Files.Count} records to the database.");
}
private void CompareButton_Click(object sender, EventArgs e)
@@ -56,7 +77,57 @@ namespace DataOrganizer
var db = new DB();
var p = GetProfileToCompare();
var f = GetFolderGroupToCompare();
ComparisionSnapshot = new Snapshot(db.GetFilesForProfileByFolderGroup(p.Id, f.Id), f);
var diff = ActiveSnapshot.Diff(ComparisionSnapshot);
foreach(var file in diff.NewFiles)
AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingInsert);
foreach (var file in diff.ModifiedFiles)
AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingUpdate);
foreach (var file in diff.DeletedFiles)
AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingDelete);
}
private void AddFileSnapshotToDiffView(FileSnapshot file, DB.FolderGroup folderGroup, FileSnapshot.FileStatus fileStatus = FileSnapshot.FileStatus.None)
{
var folder = file.ParentFolder;
while (folder != null)
{
if (folder.FullPath == folderGroup.Path) break;
var n = new TreeNode(folder.Name) { Name = folder.FullPath };
if (!DiffTreeNodes.ContainsKey(n.Name))
{
if(folder.Parent != null && folder.Parent.FullPath == folderGroup.Path)
{
DiffViewTreeView.Nodes.Add(n);
}
DiffTreeNodes.Add(n.Name, n);
}
folder = folder.Parent;
}
var node = new TreeNode(file.Name) { Name = file.FullPath };
DiffTreeNodes.Add(file.FullPath, node);
DiffTreeNodes[file.ParentFolder.FullPath].Nodes.Add(node);
switch (fileStatus)
{
case FileSnapshot.FileStatus.PendingInsert:
node.BackColor = Color.LightBlue;
break;
case FileSnapshot.FileStatus.PendingUpdate:
node.BackColor = Color.Orange;
node.ForeColor = Color.White;
break;
case FileSnapshot.FileStatus.PendingDelete:
node.BackColor = Color.Red;
break;
}
}
private void CompareAgainstProfileComboBox_SelectedIndexChanged(object sender, EventArgs e)
@@ -78,6 +149,8 @@ namespace DataOrganizer
ClearDiffResults();
CompareButton.Enabled = ActiveSnapshot.Files.Count > 0;
ComparisionFolderViewGroupBox.Text = $"Folder View of {GetProfileToCompare().Name}:";
}
private void SelectFolderGroupComboBoxMainMenu_SelectedIndexChanged(object sender, EventArgs e)
@@ -104,6 +177,7 @@ namespace DataOrganizer
ScanSelectedFolderGroupButton.Text = "Scan Folder Group";
SelectedProfileDataLabel.Text = $"Loaded snapshot data for {files.Count} file(s).";
SelectedGroupFolderViewGroupBox.Text = $"Folder View of {GetSelectedProfile().Name}:";
}
private TreeNode BuildTreeNode(Folder folder)
@@ -175,6 +249,10 @@ namespace DataOrganizer
ScanSelectedFolderGroupButton.Text = "Scan for Changes";
MoveNewFilesButton.Enabled = false;
CommitFilesChangesButton.Enabled = false;
SelectedGroupFolderViewGroupBox.Text = string.Empty;
SelectedFolderViewGroupTreeView.Nodes.Clear();
ComparisionFolderViewGroupBox.Text = string.Empty;
ComparisionFolderViewTreeView.Nodes.Clear();
}
private void ClearDiffResults()