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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user