Added a new structor to help make getting file and folder information much easier.

This commit is contained in:
Admin
2020-11-13 13:16:06 -06:00
parent 0af7111d08
commit cc3c87cb5d
6 changed files with 409 additions and 89 deletions
+175 -27
View File
@@ -16,6 +16,7 @@ namespace DataOrganizer
{
private Dictionary<string, DB.Profile> Profiles { get; } = new Dictionary<string, DB.Profile>();
private Dictionary<string, DB.FolderGroup> FolderGroups { get; } = new Dictionary<string, DB.FolderGroup>();
//private Dictionary<string, Folder> Folders { get; } = new Dictionary<string, Folder>();
public FileViewer()
{
@@ -31,10 +32,71 @@ namespace DataOrganizer
}
ProfileComboBox.SelectedIndexChanged += ProfileComboBox_SelectedIndexChanged;
RootFolderComboBox.SelectedIndexChanged += SelectedFolderComboBox_SelectedIndexChanged;
ProfileComboBox.SelectedIndex = 0;
}
private void SelectedFolderComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
var folder = FolderGroups[RootFolderComboBox.Text];
var rootDepth = folder.Path.Split(new char[] { Path.DirectorySeparatorChar }).Length;
var profile = Profiles[ProfileComboBox.Text];
var includedFolders = new Dictionary<string, TreeNode>();
var db = new DB();
PrimaryFilesTreeView.Nodes.Clear();
var files = db.GetFilesForProfileByFolderGroup(profile.Id, folder.Id);
var d = new Snapshot(files, profile, folder);
var currentShowNode = new TreeNode();
foreach (var file in files)
{
var folders = file.FullPath.Split(new char[] { Path.DirectorySeparatorChar });
var currentPath = folder.Path;
if(folders.Length == rootDepth + 1)
{
PrimaryFilesTreeView.Nodes.Add(new TreeNode(folders[rootDepth]) { Name = Path.Combine(currentPath, folders[rootDepth]), ToolTipText = Path.Combine(currentPath, folders[rootDepth]) });
continue;
}
var previousPath = string.Empty;
if (folders.Length >= rootDepth + 1)
{
if (currentShowNode.Text != folders[rootDepth])
{
currentShowNode = new TreeNode(folders[rootDepth]) { Name = Path.Combine(currentPath, folders[rootDepth]), ToolTipText = Path.Combine(currentPath, folders[rootDepth]) };
includedFolders.Add(Path.Combine(currentPath, folders[rootDepth]), currentShowNode);
PrimaryFilesTreeView.Nodes.Add(currentShowNode);
}
}
for(var i = rootDepth; i < folders.Length - 1; i++)
{
previousPath = currentPath;
currentPath = Path.Combine(currentPath, folders[i]);
if(!includedFolders.ContainsKey(currentPath))
{
var newNode = new TreeNode(folders[i]) { Name = currentPath, ToolTipText = currentPath };
if (includedFolders.ContainsKey(previousPath))
{
includedFolders[previousPath].Nodes.Add(newNode);
includedFolders.Add(currentPath, newNode);
}
}
}
var node = includedFolders[currentPath];
node.Nodes.Add(new TreeNode(folders[folders.Length - 1]) { Name = Path.Combine(currentPath, folders[folders.Length - 1]), ToolTipText = Path.Combine(currentPath, folders[folders.Length - 1]) });
}
}
private void ProfileComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
var profile = Profiles[ProfileComboBox.Text];
@@ -58,48 +120,67 @@ namespace DataOrganizer
private void FolderSelectButton_Click(object sender, EventArgs e)
{
var folder = FolderGroups[RootFolderComboBox.Text];
var db = new DB();
//var folder = FolderGroups[RootFolderComboBox.Text];
//var profile = Profiles[ProfileComboBox.Text];
//var db = new DB();
StatusLabel.Text = $"{db.GetNamingPatternById(folder.PatternId)}";
StatusStrip.Refresh();
//StatusLabel.Text = $"{db.GetNamingPatternById(folder.PatternId)}";
//StatusStrip.Refresh();
//PrimaryFilesTreeView.Nodes.Clear();
//var files = db.GetFilesForProfileByFolderGroup(profile.Id, folder.Id);
//if (files.Count == 0) return;
//var fileInfos = new List<FileInfo>();
//foreach(var file in files)
//{
// fileInfos.Add(new FileInfo(file.FullPath));
//}
}
private void ScanRootFolderButton_Click(object sender, EventArgs e)
{
var folder = FolderGroups[RootFolderComboBox.Text];
var db = new DB();
var pattern = db.GetNamingPatternById(folder.PatternId);
var regex = new Regex(pattern);
PrimaryFilesTreeView.Nodes.Clear();
//var db = new DB();
//var pattern = db.GetNamingPatternById(folder.PatternId);
//var regex = new Regex(pattern);
//PrimaryFilesTreeView.Nodes.Clear();
var dirs = Directory.EnumerateDirectories(folder.Path);
//var dirs = Directory.EnumerateDirectories(folder.Path);
foreach (var dir in dirs)
{
var dirInfo = new DirectoryInfo(dir);
PrimaryFilesTreeView.Nodes.Add(CreateNode(dirInfo, pattern));
}
//foreach (var dir in dirs)
//{
// var dirInfo = new DirectoryInfo(dir);
// PrimaryFilesTreeView.Nodes.Add(CreateNode(dirInfo, pattern));
//}
foreach(var file in Directory.EnumerateFiles(folder.Path))
{
var fileInfo = new FileInfo(file);
var fileNode = new TreeNode(fileInfo.Name) { Name = fileInfo.FullName };
//foreach(var file in Directory.EnumerateFiles(folder.Path))
//{
// var fileInfo = new FileInfo(file);
// var fileNode = new TreeNode(fileInfo.Name) { Name = fileInfo.FullName };
if (!regex.IsMatch(fileInfo.Name))
{
fileNode.ForeColor = Color.DarkOrange;
}
// if (!regex.IsMatch(fileInfo.Name))
// {
// fileNode.ForeColor = Color.DarkOrange;
// }
PrimaryFilesTreeView.Nodes.Add(fileNode);
}
// PrimaryFilesTreeView.Nodes.Add(fileNode);
//}
WriteFilesToDb(folder.Path);
}
private TreeNode CreateNode(DirectoryInfo dir, string pattern)
{
var folder = FolderGroups[RootFolderComboBox.Text];
var profile = Profiles[ProfileComboBox.Text];
var namingViolation = false;
var node = new TreeNode(dir.Name) { Name = dir.FullName };
var regex = new Regex(pattern);
var db = new DB();
var files = Directory.EnumerateFiles(dir.FullName);
@@ -122,15 +203,16 @@ namespace DataOrganizer
}
node.Nodes.Add(fileNode);
db.InsertNewFileRecord(GetFileSnapshots(dir.FullName), profile.Id, folder.Id, folder.Path);
}
if (namingViolation) node.ForeColor = Color.DarkOrange;
var dirs = Directory.EnumerateDirectories(dir.FullName);
foreach(var folder in dirs)
foreach(var f in dirs)
{
var child = CreateNode(new DirectoryInfo(folder), pattern);
var child = CreateNode(new DirectoryInfo(f), pattern);
node.ForeColor = child.ForeColor;
node.Nodes.Add(child);
}
@@ -138,9 +220,75 @@ namespace DataOrganizer
return node;
}
private struct Folder
private void WriteFilesToDb(string root)
{
var dir = new DirectoryInfo(root);
var folder = FolderGroups[RootFolderComboBox.Text];
var profile = Profiles[ProfileComboBox.Text];
//var db = new DB();
//var pattern = db.GetNamingPatternById(folder.PatternId);
WriteFilesInFolderToDb(dir.FullName, profile.Id, folder.Id, root);
UpdateStatusStrip("Finished processing files.");
}
private void WriteFilesInFolderToDb(string path, int profileId, int folderId, string root)
{
var dir = new DirectoryInfo(path);
var db = new DB();
var files = GetFileSnapshots(dir.FullName);
if(files.Count > 0 ) db.InsertNewFileRecord(files, profileId, folderId, root);
foreach(var d in dir.EnumerateDirectories())
{
UpdateStatusStrip($"Processing {d.FullName}");
WriteFilesInFolderToDb(d.FullName, profileId, folderId, root);
}
}
private List<DB.FileSnapshot> GetFileSnapshots(string path)
{
var dir = new DirectoryInfo(path);
var profile = GetCurrentProfile();
var folderGroup = GetCurrentFolderGroup();
var snapshots = new List<DB.FileSnapshot>();
foreach(var file in dir.EnumerateFiles())
{
snapshots.Add(new DB.FileSnapshot
{
FullPath = file.FullName,
Name = file.Name,
CreationDate = file.CreationTimeUtc,
ModifiedDate = file.LastWriteTimeUtc,
ProfileId = profile.Id,
RootFolderId = folderGroup.Id,
Size = file.Length,
PatternId = 0 //TODO: Add something that let's the user override the global pattern.
});
}
return snapshots;
}
private DB.Profile GetCurrentProfile()
{
return Profiles[ProfileComboBox.Text];
}
private DB.FolderGroup GetCurrentFolderGroup()
{
return FolderGroups[RootFolderComboBox.Text];
}
private void UpdateStatusStrip(string message)
{
StatusLabel.Text = message;
StatusStrip.Refresh();
}
}
}