using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace DataOrganizer { public partial class FileViewer : Form { private Dictionary Profiles { get; } = new Dictionary(); private Dictionary FolderGroups { get; } = new Dictionary(); public FileViewer() { InitializeComponent(); var db = new DB(); var profiles = db.GetProfiles(); foreach(var profile in profiles) { ProfileComboBox.Items.Add(profile.Name); Profiles.Add(profile.Name, profile); } ProfileComboBox.SelectedIndexChanged += ProfileComboBox_SelectedIndexChanged; ProfileComboBox.SelectedIndex = 0; } private void ProfileComboBox_SelectedIndexChanged(object sender, EventArgs e) { var profile = Profiles[ProfileComboBox.Text]; RootFolderComboBox.Items.Clear(); FolderGroups.Clear(); if (profile.FolderGroups.Count > 0) { foreach (var folder in profile.FolderGroups) { RootFolderComboBox.Items.Add(folder.Name); FolderGroups.Add(folder.Name, folder); } RootFolderComboBox.SelectedIndex = 0; } RootFolderComboBox.Enabled = true; } private void FolderSelectButton_Click(object sender, EventArgs e) { var folder = FolderGroups[RootFolderComboBox.Text]; var db = new DB(); StatusLabel.Text = $"{db.GetNamingPatternById(folder.PatternId)}"; StatusStrip.Refresh(); } 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 dirs = Directory.EnumerateDirectories(folder.Path); 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 }; if (!regex.IsMatch(fileInfo.Name)) { fileNode.ForeColor = Color.DarkOrange; } PrimaryFilesTreeView.Nodes.Add(fileNode); } } private TreeNode CreateNode(DirectoryInfo dir, string pattern) { var namingViolation = false; var node = new TreeNode(dir.Name) { Name = dir.FullName }; var regex = new Regex(pattern); var files = Directory.EnumerateFiles(dir.FullName); foreach (var file in files) { var fileInfo = new FileInfo(file); var fileNode = new TreeNode(fileInfo.Name) { Name = fileInfo.FullName }; //var match = regex.Match(fileInfo.Name); //var stringBuilder = new StringBuilder(); //if (!match.Groups[1].Success) // stringBuilder.Append($"Failed to match {regex.GroupNameFromNumber(1)} ");//match.Groups[0].Name}"); //if (!match.Groups[2].Success) // stringBuilder.Append($"Failed to match {regex.GroupNameFromNumber(2)} "); if (!regex.IsMatch(fileInfo.Name)) { namingViolation = true; fileNode.ForeColor = Color.DarkOrange; } node.Nodes.Add(fileNode); } if (namingViolation) node.ForeColor = Color.DarkOrange; var dirs = Directory.EnumerateDirectories(dir.FullName); foreach(var folder in dirs) { var child = CreateNode(new DirectoryInfo(folder), pattern); node.ForeColor = child.ForeColor; node.Nodes.Add(child); } return node; } private struct Folder { } } }