251 lines
8.5 KiB
C#
251 lines
8.5 KiB
C#
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<DB.Profile> Profiles { get; set; } = new List<DB.Profile>();
|
|
private List<DB.FolderGroup> FolderGroups { get; set; } = new List<DB.FolderGroup>();
|
|
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<FileInfo> GetAllFilesFromDirectory(DirectoryInfo directory)
|
|
{
|
|
var files = new List<FileInfo>();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|