147 lines
4.6 KiB
C#
147 lines
4.6 KiB
C#
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<string, DB.Profile> Profiles { get; } = new Dictionary<string, DB.Profile>();
|
|
private Dictionary<string, DB.FolderGroup> FolderGroups { get; } = new Dictionary<string, DB.FolderGroup>();
|
|
|
|
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
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|