diff --git a/.vs/DataOrganizer/v16/.suo b/.vs/DataOrganizer/v16/.suo index 6a8e369..a018dae 100644 Binary files a/.vs/DataOrganizer/v16/.suo and b/.vs/DataOrganizer/v16/.suo differ diff --git a/DataOrganizer/FileViewer.cs b/DataOrganizer/FileViewer.cs index d659eb4..9be3da7 100644 --- a/DataOrganizer/FileViewer.cs +++ b/DataOrganizer/FileViewer.cs @@ -16,7 +16,8 @@ namespace DataOrganizer { private Dictionary Profiles { get; } = new Dictionary(); private Dictionary FolderGroups { get; } = new Dictionary(); - //private Dictionary Folders { get; } = new Dictionary(); + private string CurrentNamingPattern { get; set; } = string.Empty; + private ContextMenu PrimaryTreeContextMenu { get; set; } = new ContextMenu(); //Copy to default new content location, set new naming rules etc.. public FileViewer() { @@ -39,64 +40,52 @@ namespace DataOrganizer 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(); var db = new DB(); + var folderGroup = FolderGroups[RootFolderComboBox.Text]; + CurrentNamingPattern = db.GetNamingPatternById(folderGroup.PatternId); + var profile = Profiles[ProfileComboBox.Text]; + PrimaryFilesTreeView.Nodes.Clear(); - var files = db.GetFilesForProfileByFolderGroup(profile.Id, folder.Id); - var d = new Snapshot(files, profile, folder); + var files = db.GetFilesForProfileByFolderGroup(profile.Id, folderGroup.Id); + var snapshot = new Snapshot(files, profile, folderGroup); - var currentShowNode = new TreeNode(); - - foreach (var file in files) + foreach(var folder in snapshot.Root.Folders) { - 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]) }); + PrimaryFilesTreeView.Nodes.Add(GetNodeFromSnapshot(folder)); } } + private TreeNode GetNodeFromSnapshot(KeyValuePair folder) + { + var node = new TreeNode(folder.Value.Name) { Name = folder.Key, ToolTipText = folder.Key }; + var regex = new Regex(CurrentNamingPattern); + + foreach(var f in folder.Value.Folders) + { + var folderNode = GetNodeFromSnapshot(f); + node.Nodes.Add(folderNode); + if (folderNode.ForeColor == Color.Orange) + { + node.ForeColor = folderNode.ForeColor; + node.ToolTipText = "Naming violations found!"; + } + } + + foreach(var file in folder.Value.Files) + { + var fileNode = new TreeNode(file.Value.Name) { Name = file.Key, ToolTipText = file.Key }; + + if (!regex.IsMatch(file.Value.Name)) fileNode.ForeColor = Color.Orange; + + node.Nodes.Add(fileNode); + node.ForeColor = fileNode.ForeColor; + } + + return node; + } + private void ProfileComboBox_SelectedIndexChanged(object sender, EventArgs e) { var profile = Profiles[ProfileComboBox.Text];