using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DataOrganizer { public partial class FileManager : Form { private List Profiles { get; set; } = new List(); private List FolderGroups { get; set; } = new List(); private Snapshot ActiveSnapshot { get; set; } public FileManager() { InitializeComponent(); ScanSelectedFolderGroupButton.Click += ScanSelectedFolderGroupButton_Click; SelectProfileComboBoxMainMenu.SelectedIndexChanged += SelectProfileComboBoxMainMenu_SelectedIndexChanged; SelectFolderGroupComboBoxMainMenu.SelectedIndexChanged += SelectFolderGroupComboBoxMainMenu_SelectedIndexChanged; CompareAgainstProfileComboBox.SelectedIndexChanged += CompareAgainstProfileComboBox_SelectedIndexChanged; CompareAgainstFolderGroupComboBox.SelectedIndexChanged += CompareAgainstFolderGroupComboBox_SelectedIndexChanged; CompareButton.Click += CompareButton_Click; PopulateProfileComboBox(); } private void ScanSelectedFolderGroupButton_Click(object sender, EventArgs e) { var folderGroup = GetSelectedFolderGroup(); var files = GetAllFilesFromDirectory(new DirectoryInfo(folderGroup.Path)); var snapshot = new Snapshot(files, folderGroup); foreach (var folder in snapshot.Root.Folders.Values) DiffViewTreeView.Nodes.Add(BuildTreeNode(folder)); CommitFilesChangesButton.Enabled = true; MoveNewFilesButton.Enabled = true; if (ActiveSnapshot.Files.Count == 0) CommitFirstTimeScaneToDatabase(snapshot); } private void CommitFirstTimeScaneToDatabase(Snapshot snapshot) { var db = new DB(); db.InsertNewFileRecord(snapshot.Files.Values.ToList(), GetSelectedProfile().Id, GetSelectedFolderGroup().Id, GetSelectedFolderGroup().Path); } private void CompareButton_Click(object sender, EventArgs e) { var db = new DB(); var p = GetProfileToCompare(); var f = GetFolderGroupToCompare(); } private void CompareAgainstProfileComboBox_SelectedIndexChanged(object sender, EventArgs e) { ClearDiffResults(); CompareAgainstFolderGroupComboBox.Items.Clear(); var profile = GetProfileToCompare(); foreach(var folder in profile.FolderGroups) CompareAgainstFolderGroupComboBox.Items.Add(folder.Name); if(profile.FolderGroups.Count > 0) CompareAgainstFolderGroupComboBox.SelectedIndex = 0; } private void CompareAgainstFolderGroupComboBox_SelectedIndexChanged(object sender, EventArgs e) { ClearDiffResults(); CompareButton.Enabled = ActiveSnapshot.Files.Count > 0; } private void SelectFolderGroupComboBoxMainMenu_SelectedIndexChanged(object sender, EventArgs e) { ClearForm(true); var db = new DB(); var folderGroup = GetSelectedFolderGroup(); var files = db.GetFilesForProfileByFolderGroup(GetSelectedProfile().Id, folderGroup.Id); ActiveSnapshot = new Snapshot(files, folderGroup); //foreach (var orgFolder in ActiveSnapshot.Root.Folders.Values) //{ // FolderGroupTreeView.Nodes.Add(BuildTreeNode(orgFolder)); //} CompareButton.Enabled = files.Count > 0; if (CompareAgainstFolderGroupComboBox.FindString(folderGroup.Name) != -1) CompareAgainstFolderGroupComboBox.SelectedIndex = CompareAgainstFolderGroupComboBox.FindString(folderGroup.Name); if (files.Count == 0) ScanSelectedFolderGroupButton.Text = "Scan Folder Group"; SelectedProfileDataLabel.Text = $"Loaded snapshot data for {files.Count} file(s)."; } private TreeNode BuildTreeNode(Folder folder) { var node = new TreeNode(folder.Name) { Name = folder.FullPath }; foreach(var dir in folder.Folders.Values) { node.Nodes.Add(BuildTreeNode(dir)); } foreach(var file in folder.Files.Values) { node.Nodes.Add(new TreeNode(file.Name) { Name = file.FullPath }); } return node; } private List GetAllFilesFromDirectory(DirectoryInfo directory) { var files = new List(); files.AddRange(directory.EnumerateFiles()); foreach (var dir in directory.EnumerateDirectories()) { UpdateStatusLabel($"Scanning Directory {dir.Name}..."); files.AddRange(GetAllFilesFromDirectory(dir)); } return files; } private void SelectProfileComboBoxMainMenu_SelectedIndexChanged(object sender, EventArgs e) { ClearForm(); FolderGroups = GetSelectedProfile().FolderGroups; SelectFolderGroupComboBoxMainMenu.Items.Clear(); CompareAgainstProfileComboBox.Items.Clear(); foreach (var folder in FolderGroups) SelectFolderGroupComboBoxMainMenu.Items.Add(folder.Name); if (FolderGroups.Count > 0) SelectFolderGroupComboBoxMainMenu.SelectedIndex = 0; if(Profiles.Count > 1) { foreach(var profile in Profiles) if(profile.Name != SelectProfileComboBoxMainMenu.Text) CompareAgainstProfileComboBox.Items.Add(profile.Name); CompareAgainstProfileComboBox.SelectedIndex = 0; } } private void ClearForm(bool isFolderGroupChange = false) { DiffViewTreeView.Nodes.Clear(); if (!isFolderGroupChange) { CompareAgainstProfileComboBox.Items.Clear(); CompareAgainstFolderGroupComboBox.Items.Clear(); } CompareButton.Enabled = false; ScanSelectedFolderGroupButton.Text = "Scan for Changes"; MoveNewFilesButton.Enabled = false; CommitFilesChangesButton.Enabled = false; } private void ClearDiffResults() { DiffViewTreeView.Nodes.Clear(); } private void PopulateProfileComboBox() { var db = new DB(); Profiles = db.GetProfiles(); SelectProfileComboBoxMainMenu.Items.Clear(); foreach(var profile in Profiles) SelectProfileComboBoxMainMenu.Items.Add(profile.Name); if (Profiles.Count > 0) { if(Profiles.Count(x => x.MachineName == Environment.MachineName) == 1) SelectProfileComboBoxMainMenu.SelectedIndex = Profiles.FindIndex(x => x.MachineName == Environment.MachineName); else SelectProfileComboBoxMainMenu.SelectedIndex = 0; } } private void RefreshForm() { ClearForm(); PopulateProfileComboBox(); } private DB.Profile GetSelectedProfile() { return Profiles[SelectProfileComboBoxMainMenu.SelectedIndex]; } private DB.FolderGroup GetSelectedFolderGroup() { return FolderGroups[SelectFolderGroupComboBoxMainMenu.SelectedIndex]; } private DB.Profile GetProfileToCompare() { return Profiles.First(x => x.Name == CompareAgainstProfileComboBox.Text); } private DB.FolderGroup GetFolderGroupToCompare() { return GetProfileToCompare().FolderGroups.First(x => x.Name == CompareAgainstFolderGroupComboBox.Text); } private void ProfilesManageMainMenu_Click(object sender, EventArgs e) { var form = new ProfileManager(); form.ShowDialog(); RefreshForm(); } private void NamingPatternsManageMainMenu_Click(object sender, EventArgs e) { var form = new NamingConventionManager(); form.ShowDialog(); } private void UpdateStatusLabel(string message) { StatusLabel.Text = message; statusStrip1.Refresh(); } } }