180 lines
9.1 KiB
C#
180 lines
9.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
using System.Data.SqlServerCe;
|
|
|
|
namespace Saviour_Backup_System
|
|
{
|
|
public partial class addBackupWizard : Form
|
|
{
|
|
public addBackupWizard()
|
|
{
|
|
InitializeComponent();
|
|
populateDropdown();
|
|
assignToolTips();
|
|
this.Size = new Size(583, 299);
|
|
}
|
|
|
|
private void assignToolTips() {
|
|
ToolTip tempTip = new ToolTip();
|
|
tempTip.AutoPopDelay = 5000;
|
|
tempTip.InitialDelay = 1000;
|
|
tempTip.ReshowDelay = 500;
|
|
tempTip.ShowAlways = true;
|
|
|
|
//huge list of tooltips to use!
|
|
tempTip.SetToolTip(this.backupNameInput, "Name the backup\nAn easy name for the backup, or even a description.");
|
|
tempTip.SetToolTip(this.drivesDropdown, "Select the drive\nWhich drive would you like to backup?");
|
|
tempTip.SetToolTip(this.compressionTypeDropdown, "Compression?\nWould you like to compress the backup to save space on your computer?");
|
|
tempTip.SetToolTip(this.previousBackupInput, "Previous backups\nHow many past backups would you like to store, enter -1 for all");
|
|
tempTip.SetToolTip(this.insertionSwitch, "Automated\nWould you like to backup the drive as soon as it is inserted to the computer?");
|
|
tempTip.SetToolTip(this.unifiedFileSwitch, "Single File\nWould you like to store the backup in a single file?");
|
|
tempTip.SetToolTip(this.folderPath, "Location\nWhere would you like to store the backup?");
|
|
tempTip.SetToolTip(this.createButton, "Let's Go!\nClick to create the backup record, this can take a few seconds to run.");
|
|
tempTip.SetToolTip(this.directoryBrowseButton, "Where?\nClick here to browse your computer to find where to store the backup.");
|
|
}
|
|
|
|
private void directoryBrowseButton_Click(object sender, EventArgs e)
|
|
{
|
|
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
|
|
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
folderPath.Text = folderBrowserDialog.SelectedPath;
|
|
}
|
|
folderBrowserDialog.Dispose(); //memory management
|
|
}
|
|
|
|
private void populateDropdown()
|
|
{
|
|
DriveInfo[] drives = USBTools.getConnectedDrives();
|
|
foreach (DriveInfo drive in drives)
|
|
{
|
|
drivesDropdown.Items.Add(drive.Name + " " + drive.VolumeLabel);
|
|
}
|
|
}
|
|
private void clearControls()
|
|
{
|
|
backupNameInput.Text = "";
|
|
drivesDropdown.Text = "";
|
|
compressionTypeDropdown.Text = "";
|
|
insertionSwitch.Value = false;
|
|
unifiedFileSwitch.Value = false;
|
|
previousBackupInput.Value = 0;
|
|
folderPath.Text = "";
|
|
}
|
|
private void lockControls(bool state)
|
|
{
|
|
backupNameInput.ReadOnly = state;
|
|
drivesDropdown.Enabled = !state;
|
|
compressionTypeDropdown.Enabled = !state;
|
|
insertionSwitch.IsReadOnly = state;
|
|
unifiedFileSwitch.IsReadOnly = state;
|
|
previousBackupInput.Enabled = !state;
|
|
folderPath.ReadOnly = state;
|
|
}
|
|
private void createButton_Click(object sender, EventArgs e) {
|
|
DriveInfo drive = USBTools.getDriveObject(drivesDropdown.Text.Substring(0, 1));
|
|
lockControls(true);
|
|
if ((folderPath.Text == "") || (previousBackupInput.Text == "") || (compressionTypeDropdown.Text == "") || (drivesDropdown.Text == "") || (backupNameInput.Text == "")) {
|
|
MessageBox.Show("You have not filled in every element, Please try again!", "Not everything is complete", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
lockControls(false);
|
|
return;
|
|
}
|
|
|
|
statusProgress.Text = "Initialising...";
|
|
int initHeight = 299;
|
|
while (this.Size.Height != 330) {
|
|
initHeight++;
|
|
this.Size = new Size(583, initHeight);
|
|
Thread.Sleep(10);
|
|
}
|
|
|
|
statusProgress.Text = "Checking form...";
|
|
if (!Directory.Exists(folderPath.Text)) {
|
|
DialogResult result = MessageBox.Show("The folder path you have entered doesnt exist, would you like to create it?", "Create Folder", MessageBoxButtons.YesNo);
|
|
if (result == DialogResult.Yes) {
|
|
try { Directory.CreateDirectory(folderPath.Text);
|
|
} catch {
|
|
MessageBox.Show("Error Creating Folder! Please check the path and try agian.", "Error creating folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
else if (compressionTypeDropdown.Text == "None" && unifiedFileSwitch.Value == true) {
|
|
MessageBox.Show("You cannot have a unified file without some form of compression, please select again.", "Compression Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
} else if (drive.VolumeLabel == ""){
|
|
MessageBox.Show("You cannot backup a drive with no label, please rename it and try again","Can't use default name", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
} else {
|
|
statusProgress.Text = "Initialising database connection...";
|
|
createRecord();
|
|
statusProgress.Text = "Complete!";
|
|
statusProgress.ProgressType = DevComponents.DotNetBar.eProgressItemType.Standard;
|
|
statusProgress.Value = statusProgress.Maximum;
|
|
MessageBox.Show("Record created successfully!\nYou may now backup your drive.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
clearControls();
|
|
this.Close();
|
|
}
|
|
while (this.Size.Height != 299) {
|
|
initHeight--;
|
|
this.Size = new Size(583, initHeight);
|
|
Thread.Sleep(10);
|
|
}
|
|
}
|
|
|
|
private void createRecord() {
|
|
SqlCeConnection conn = databaseTools.conn;
|
|
SqlCeCommand cmd = conn.CreateCommand();
|
|
DriveInfo drive = USBTools.getDriveObject(drivesDropdown.Text.Substring(0, 1));
|
|
conn.Open();
|
|
statusProgress.Text = "Connection established...";
|
|
|
|
cmd.CommandText = "INSERT INTO Drive (ID, Name, Capacity, File_System, Type) VALUES (?,?,?,?,?)";
|
|
cmd.Parameters.Add(new SqlCeParameter("Drive ID", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Drive Name", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Capacity", SqlDbType.BigInt));
|
|
cmd.Parameters.Add(new SqlCeParameter("File System", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Type", SqlDbType.NText));
|
|
cmd.Prepare();
|
|
cmd.Parameters["Drive ID"].Value = USBTools.calculateDriveID(drive);
|
|
cmd.Parameters["Drive Name"].Value = drive.VolumeLabel;
|
|
cmd.Parameters["Capacity"].Value = Convert.ToInt64(drive.TotalSize);
|
|
cmd.Parameters["File System"].Value = drive.DriveFormat;
|
|
cmd.Parameters["Type"].Value = USBTools.getDriveType(drive);
|
|
cmd.ExecuteNonQuery();
|
|
cmd.Parameters.Clear();
|
|
statusProgress.Text = "Drive Record Created...";
|
|
|
|
cmd.CommandText = "INSERT INTO Recordset VALUES (?, ?, ?, ?, ?, ?, ?)";
|
|
cmd.Parameters.Add(new SqlCeParameter("Name", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Drive ID", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Creation Date", SqlDbType.BigInt));
|
|
cmd.Parameters.Add(new SqlCeParameter("Backup Location", SqlDbType.NText));
|
|
cmd.Parameters.Add(new SqlCeParameter("Automatic", SqlDbType.Bit));
|
|
cmd.Parameters.Add(new SqlCeParameter("Compression", SqlDbType.Bit));
|
|
cmd.Parameters.Add(new SqlCeParameter("Previous Backups", SqlDbType.Int));
|
|
cmd.Prepare();
|
|
cmd.Parameters["Name"].Value = backupNameInput.Text;
|
|
cmd.Parameters["Drive ID"].Value = USBTools.calculateDriveID(drive);
|
|
cmd.Parameters["Creation Date"].Value = tools.getUnixTimeStamp();
|
|
cmd.Parameters["Backup Location"].Value = folderPath.Text;
|
|
cmd.Parameters["Automatic"].Value = insertionSwitch.Value;
|
|
cmd.Parameters["Compression"].Value = unifiedFileSwitch.Value;
|
|
cmd.Parameters["Previous Backups"].Value = previousBackupInput.Value;
|
|
cmd.ExecuteNonQuery();
|
|
cmd.Parameters.Clear();
|
|
statusProgress.Text = "Recordset created...";
|
|
conn.Close();
|
|
|
|
}
|
|
|
|
private void insertionSwitch_Click(object sender, EventArgs e) { insertionSwitch.Value = !insertionSwitch.Value; }
|
|
|
|
private void unifiedFileSwitch_Click(object sender, EventArgs e) { unifiedFileSwitch.Value = !unifiedFileSwitch.Value; }
|
|
}
|
|
}
|