Imported MicronSync v1.1.0.1

This commit is contained in:
2019-03-05 21:28:44 +00:00
parent b3fa1bb74c
commit 7e7fe3881e
29 changed files with 1320 additions and 308 deletions
+60 -57
View File
@@ -8,28 +8,10 @@ namespace MicronSync
/// </summary>
public class CommonIO : IDisposable
{
/// <summary>
/// Browse to existing folder on the system.
/// </summary>
/// <param name="originalPath"></param>
/// <returns></returns>
public string BrowseFolder(string originalPath)
{
// The result of the Windows Forms dialog is passed as a
// string to the method caller.
var folder = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = folder.ShowDialog();
// Only change the value if a valid path is entered.
string newPath;
if (folder.SelectedPath != "") { newPath = folder.SelectedPath.ToString(); }
else { newPath = originalPath; }
return newPath;
}
public enum FileType { sz, ini }
#region Filesystem
public string SaveFile(string originalPath, FileType f)
{
var file = new System.Windows.Forms.SaveFileDialog();
@@ -88,22 +70,39 @@ namespace MicronSync
return newPath;
}
/// <summary>
/// Browse to existing folder on the system.
/// </summary>
/// <param name="originalPath"></param>
/// <returns></returns>
public string BrowseFolder(string originalPath)
{
// The result of the Windows Forms dialog is passed as a
// string to the method caller.
var folder = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = folder.ShowDialog();
// Only change the value if a valid path is entered.
string newPath;
if (folder.SelectedPath != "") { newPath = folder.SelectedPath.ToString(); }
else { newPath = originalPath; }
return newPath;
}
#endregion
#region String manipulation
public string CalculateDirectoryModifyDate (string dir)
{
string result = null;
try
{
if (Directory.Exists(dir))
result = string.Format("{0} - {1}",
Directory.GetLastWriteTime(dir).ToShortDateString(),
Directory.GetLastWriteTime(dir).ToLongTimeString());
else
result = "N/A";
}
catch (System.Exception)
{
throw;
}
if (Directory.Exists(dir))
result = string.Format("{0} - {1}",
Directory.GetLastWriteTime(dir).ToShortDateString(),
Directory.GetLastWriteTime(dir).ToLongTimeString());
else
result = "N/A";
return result;
}
@@ -111,23 +110,18 @@ namespace MicronSync
public string CalculateFileModifyDate(string file)
{
string result = null;
try
{
if (File.Exists(file))
result = string.Format("{0} - {1}",
File.GetLastWriteTime(file).ToShortDateString(),
File.GetLastWriteTime(file).ToLongTimeString());
else
result = "N/A";
}
catch (System.Exception)
{
throw;
}
if (File.Exists(file))
result = string.Format("{0} - {1}",
File.GetLastWriteTime(file).ToShortDateString(),
File.GetLastWriteTime(file).ToLongTimeString());
else
result = "N/A";
return result;
}
#endregion.
#region Filesystem Modification
public enum endResult
@@ -135,7 +129,7 @@ namespace MicronSync
ClearEntireDirectory_Error,
CopyEntireDirectory_Error,
Default,
FileNotExist,
RenameEntireDirectory_Error,
}
public endResult ClearEntireDirectory(string dir)
@@ -167,6 +161,23 @@ namespace MicronSync
return _endResult;
}
public endResult RenameEntireDirectory(string dir, string newName)
{
endResult _endResult = endResult.Default;
try
{
Directory.Move(dir, Path.Combine(
Path.GetDirectoryName(dir), newName));
}
catch (Exception)
{
_endResult = endResult.RenameEntireDirectory_Error;
}
return _endResult;
}
public endResult CopyEntireDirectory(string src, string dst)
{
endResult _endResult = endResult.Default;
@@ -187,32 +198,24 @@ namespace MicronSync
// Copy all files to destination.
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
File.Copy(Path.Combine(src, file.Name),
Path.Combine(dst, file.Name));
}
// Repeat for subdirectories.
foreach (DirectoryInfo subDir in dirs)
{
CopyEntireDirectory(subDir.FullName,
Path.Combine(dst, subDir.Name));
}
}
catch (Exception)
{
_endResult = endResult.CopyEntireDirectory_Error;
}
return _endResult;
}
#endregion
public void Dispose()
{
GC.Collect();
}
public void Dispose() { GC.Collect(); }
}
}
+80
View File
@@ -0,0 +1,80 @@
namespace MicronSync.Components
{
partial class ChangeLog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.richTextBox = new System.Windows.Forms.RichTextBox();
this.labelVersionInfo = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// richTextBox
//
this.richTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.richTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.richTextBox.Location = new System.Drawing.Point(13, 38);
this.richTextBox.Name = "richTextBox";
this.richTextBox.ReadOnly = true;
this.richTextBox.Size = new System.Drawing.Size(359, 361);
this.richTextBox.TabIndex = 0;
this.richTextBox.Text = "";
//
// labelVersionInfo
//
this.labelVersionInfo.AutoSize = true;
this.labelVersionInfo.Location = new System.Drawing.Point(13, 13);
this.labelVersionInfo.Name = "labelVersionInfo";
this.labelVersionInfo.Size = new System.Drawing.Size(45, 13);
this.labelVersionInfo.TabIndex = 1;
this.labelVersionInfo.Text = "Version:";
//
// ChangeLog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(384, 411);
this.Controls.Add(this.labelVersionInfo);
this.Controls.Add(this.richTextBox);
this.MinimumSize = new System.Drawing.Size(400, 450);
this.Name = "ChangeLog";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "MicronSync - Change Log";
this.Load += new System.EventHandler(this.ChangeLog_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.RichTextBox richTextBox;
private System.Windows.Forms.Label labelVersionInfo;
}
}
+45
View File
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
namespace MicronSync.Components
{
public partial class ChangeLog : Form
{
public ChangeLog()
{
InitializeComponent();
}
private void ChangeLog_Load(object sender, System.EventArgs e)
{
var assembly = Assembly.GetExecutingAssembly();
labelVersionInfo.Text = $"MicronSync: {assembly.GetName().Version}";
using (Stream steam = assembly.GetManifestResourceStream("MicronSync.Components.Forms.ChangeLog.txt"))
using (StreamReader sr = new StreamReader(steam, true))
{
List<string> listChangelog = new List<string>();
string currentLine;
while (!string.IsNullOrEmpty(
currentLine = sr.ReadLine()))
{
if (currentLine.Contains(@"//"))
{
currentLine = currentLine.Remove(currentLine.IndexOf(@"//"));
if (!string.IsNullOrEmpty(currentLine))
listChangelog.Add(currentLine);
}
else
listChangelog.Add(currentLine);
}
richTextBox.Text = string.Join(Environment.NewLine, listChangelog);
}
}
}
}
+20
View File
@@ -0,0 +1,20 @@
// Comments are denoted at the beginning of a line with two forward slashes.
//
[Bug Fixes]
- Fixed new pre-backup algorithm from placing backup inside of source directory when the path ended with a "\".
***[MicronSync 1.1.0.0]***
[New Features]
- Inclusion of a changelog (the very thing you currently have open!)
- Ability to replicate destination and source paths between backup and restore tabs.
- Drag and drop interface for 7-Zip archives and directories for more rapid operation.
[Enhancements]
- Automatic save prompt only appears when a change has been made to the configuration since the last save.
- Paths are now validated ahead of attempting job operation.
- User interface adjustments.
- Shortcut keys for file menu!
- Source directory pre-backups are a lot faster due to much more efficient algorithm (depending on settings used).
[Bug Fixes]
- Directories could be confused as files when checking paths are not in one another.
+227
View File
@@ -0,0 +1,227 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace MicronSync.Components.Forms
{
partial class DropUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tabControl = new System.Windows.Forms.TabControl();
this.tabProcess = new System.Windows.Forms.TabPage();
this.labelIdentify = new System.Windows.Forms.Label();
this.tabSz = new System.Windows.Forms.TabPage();
this.textReadSz = new System.Windows.Forms.TextBox();
this.btnSzUseBackup = new System.Windows.Forms.Button();
this.btnSzUseRestore = new System.Windows.Forms.Button();
this.labelSz = new System.Windows.Forms.Label();
this.tabDir = new System.Windows.Forms.TabPage();
this.textReadPath = new System.Windows.Forms.TextBox();
this.btnDirRestore = new System.Windows.Forms.Button();
this.btnDirBackup = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.tabControl.SuspendLayout();
this.tabProcess.SuspendLayout();
this.tabSz.SuspendLayout();
this.tabDir.SuspendLayout();
this.SuspendLayout();
//
// tabControl
//
this.tabControl.Controls.Add(this.tabProcess);
this.tabControl.Controls.Add(this.tabSz);
this.tabControl.Controls.Add(this.tabDir);
this.tabControl.Location = new System.Drawing.Point(13, 13);
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
this.tabControl.Size = new System.Drawing.Size(474, 166);
this.tabControl.TabIndex = 0;
//
// tabProcess
//
this.tabProcess.Controls.Add(this.labelIdentify);
this.tabProcess.Location = new System.Drawing.Point(4, 22);
this.tabProcess.Name = "tabProcess";
this.tabProcess.Padding = new System.Windows.Forms.Padding(3);
this.tabProcess.Size = new System.Drawing.Size(466, 140);
this.tabProcess.TabIndex = 0;
this.tabProcess.Text = "Identification";
this.tabProcess.UseVisualStyleBackColor = true;
//
// labelIdentify
//
this.labelIdentify.AutoSize = true;
this.labelIdentify.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelIdentify.Location = new System.Drawing.Point(50, 56);
this.labelIdentify.Name = "labelIdentify";
this.labelIdentify.Size = new System.Drawing.Size(354, 31);
this.labelIdentify.TabIndex = 0;
this.labelIdentify.Text = "Identifying dropped item...";
//
// tabSz
//
this.tabSz.Controls.Add(this.textReadSz);
this.tabSz.Controls.Add(this.btnSzUseBackup);
this.tabSz.Controls.Add(this.btnSzUseRestore);
this.tabSz.Controls.Add(this.labelSz);
this.tabSz.Location = new System.Drawing.Point(4, 22);
this.tabSz.Name = "tabSz";
this.tabSz.Padding = new System.Windows.Forms.Padding(3);
this.tabSz.Size = new System.Drawing.Size(466, 140);
this.tabSz.TabIndex = 1;
this.tabSz.Text = "7-Zip File";
this.tabSz.UseVisualStyleBackColor = true;
//
// textReadSz
//
this.textReadSz.Location = new System.Drawing.Point(80, 60);
this.textReadSz.Name = "textReadSz";
this.textReadSz.ReadOnly = true;
this.textReadSz.Size = new System.Drawing.Size(307, 20);
this.textReadSz.TabIndex = 3;
//
// btnSzUseBackup
//
this.btnSzUseBackup.Location = new System.Drawing.Point(225, 90);
this.btnSzUseBackup.Name = "btnSzUseBackup";
this.btnSzUseBackup.Size = new System.Drawing.Size(162, 23);
this.btnSzUseBackup.TabIndex = 2;
this.btnSzUseBackup.Text = "Overwrite file with new backup";
this.btnSzUseBackup.UseVisualStyleBackColor = true;
this.btnSzUseBackup.Click += new System.EventHandler(this.btnSzUseBackup_Click);
//
// btnSzUseRestore
//
this.btnSzUseRestore.Location = new System.Drawing.Point(80, 90);
this.btnSzUseRestore.Name = "btnSzUseRestore";
this.btnSzUseRestore.Size = new System.Drawing.Size(139, 23);
this.btnSzUseRestore.TabIndex = 1;
this.btnSzUseRestore.Text = "Restore from backup file";
this.btnSzUseRestore.UseVisualStyleBackColor = true;
this.btnSzUseRestore.Click += new System.EventHandler(this.btnSzUseRestore_Click);
//
// labelSz
//
this.labelSz.AutoSize = true;
this.labelSz.Location = new System.Drawing.Point(115, 30);
this.labelSz.Name = "labelSz";
this.labelSz.Size = new System.Drawing.Size(233, 13);
this.labelSz.TabIndex = 0;
this.labelSz.Text = "Please choose what to do with the following file:";
//
// tabDir
//
this.tabDir.Controls.Add(this.textReadPath);
this.tabDir.Controls.Add(this.btnDirRestore);
this.tabDir.Controls.Add(this.btnDirBackup);
this.tabDir.Controls.Add(this.label1);
this.tabDir.Location = new System.Drawing.Point(4, 22);
this.tabDir.Name = "tabDir";
this.tabDir.Padding = new System.Windows.Forms.Padding(3);
this.tabDir.Size = new System.Drawing.Size(466, 140);
this.tabDir.TabIndex = 2;
this.tabDir.Text = "Directory";
this.tabDir.UseVisualStyleBackColor = true;
//
// textReadPath
//
this.textReadPath.Location = new System.Drawing.Point(80, 60);
this.textReadPath.Name = "textReadPath";
this.textReadPath.ReadOnly = true;
this.textReadPath.Size = new System.Drawing.Size(307, 20);
this.textReadPath.TabIndex = 6;
//
// btnDirRestore
//
this.btnDirRestore.Location = new System.Drawing.Point(225, 90);
this.btnDirRestore.Name = "btnDirRestore";
this.btnDirRestore.Size = new System.Drawing.Size(162, 23);
this.btnDirRestore.TabIndex = 5;
this.btnDirRestore.Text = "Restore to path";
this.btnDirRestore.UseVisualStyleBackColor = true;
this.btnDirRestore.Click += new System.EventHandler(this.btnDirRestore_Click);
//
// btnDirBackup
//
this.btnDirBackup.Location = new System.Drawing.Point(80, 90);
this.btnDirBackup.Name = "btnDirBackup";
this.btnDirBackup.Size = new System.Drawing.Size(139, 23);
this.btnDirBackup.TabIndex = 4;
this.btnDirBackup.Text = "Backup this path";
this.btnDirBackup.UseVisualStyleBackColor = true;
this.btnDirBackup.Click += new System.EventHandler(this.btnDirBackup_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(115, 30);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(241, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Please choose what to do with the following path:";
//
// DropUI
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(499, 191);
this.Controls.Add(this.tabControl);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "DropUI";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "MicronSync - Dropped item";
this.Shown += new System.EventHandler(this.DropUI_Shown);
this.tabControl.ResumeLayout(false);
this.tabProcess.ResumeLayout(false);
this.tabProcess.PerformLayout();
this.tabSz.ResumeLayout(false);
this.tabSz.PerformLayout();
this.tabDir.ResumeLayout(false);
this.tabDir.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private TabControl tabControl;
private TabPage tabProcess;
private Label labelIdentify;
private TabPage tabSz;
private TabPage tabDir;
private Button btnSzUseBackup;
private Button btnSzUseRestore;
private Label labelSz;
private Button btnDirRestore;
private Button btnDirBackup;
private Label label1;
private TextBox textReadSz;
private TextBox textReadPath;
}
}
+91
View File
@@ -0,0 +1,91 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace MicronSync.Components.Forms
{
public partial class DropUI : Form
{
public static string dropData { get; set; }
public DropAction DropResult = DropAction.Cancelled; // Default behaviour
public enum DropAction
{
SzUseRestore,
SzUseBackup,
DirUseBackup,
DirUseRestore,
LoadConfig,
UnsupportedData,
Cancelled
}
public DropUI() { InitializeComponent(); }
private void DropUI_Shown(object sender, EventArgs e)
{
BringToFront();
// Idenfify dropped data
FileAttributes attr = File.GetAttributes(DropUI.dropData);
if (dropData.EndsWith(".ini"))
{
DropResult = DropAction.LoadConfig;
Close();
}
else if (dropData.EndsWith(".7z"))
LoadSzHandler();
else if (attr == FileAttributes.Directory)
LoadDirHandler();
else
{
DropResult = DropAction.UnsupportedData;
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_BadConfigFile, null);
Close();
}
}
private void LoadDirHandler()
{
textReadPath.Text = dropData;
tabControl.TabPages.Remove(tabProcess);
tabControl.TabPages.Remove(tabSz);
}
private void LoadSzHandler()
{
textReadSz.Text = dropData;
tabControl.TabPages.Remove(tabProcess);
tabControl.TabPages.Remove(tabDir);
}
#region Form UI
private void btnDirBackup_Click(object sender, EventArgs e)
{
DropResult = DropAction.DirUseBackup;
Close();
}
private void btnDirRestore_Click(object sender, EventArgs e)
{
DropResult = DropAction.DirUseRestore;
Close();
}
private void btnSzUseRestore_Click(object sender, EventArgs e)
{
DropResult = DropAction.SzUseRestore;
Close();
}
private void btnSzUseBackup_Click(object sender, EventArgs e)
{
DropResult = DropAction.SzUseBackup;
Close();
}
#endregion
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -61,6 +61,7 @@
this.Controls.Add(this.labelProcessing);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "WorkerUI";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "MicronSync";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WorkerUI_FormClosing);
this.Load += new System.EventHandler(this.WorkerUI_Load);
@@ -59,42 +59,37 @@ namespace MicronSync.Components
private void LmzaRestore_DoWork(object sender, DoWorkEventArgs e)
{
// Only continue if file exists!
bool fileExists = false;
if (File.Exists(_ManageConfig_RO.RestoreSource))
fileExists = true;
else
_endResultCIO = CommonIO.endResult.FileNotExist;
// Only continue if above is true.
if (fileExists)
// Process params.
using (CommonIO cio = new CommonIO())
{
// Process params.
using (CommonIO cio = new CommonIO())
// Move source directory if also purging, otherwise perform standard copy.
if (_ManageConfig_RO.EnableBackup && !_ManageConfig_RO.EnablePurge)
_endResultCIO = cio.CopyEntireDirectory(_ManageConfig_RO.RestoreDestination,
_ManageConfig_RO.RestoreDestination + ".Backup");
else if (_ManageConfig_RO.EnableBackup && _ManageConfig_RO.EnablePurge)
{
if (_ManageConfig_RO.EnableBackup)
{
_endResultCIO = cio.CopyEntireDirectory(_ManageConfig_RO.RestoreDestination,
_ManageConfig_RO.RestoreDestination + ".Backup");
}
if (_ManageConfig_RO.EnablePurge)
_endResultCIO = cio.ClearEntireDirectory(_ManageConfig_RO.RestoreDestination);
_endResultCIO = cio.RenameEntireDirectory(_ManageConfig_RO.RestoreDestination,
_ManageConfig_RO.RestoreDestination + ".Backup");
Directory.CreateDirectory(_ManageConfig_RO.RestoreDestination);
}
if (_endResultCIO == CommonIO.endResult.Default)
if (_ManageConfig_RO.EnablePurge)
_endResultCIO = cio.ClearEntireDirectory(_ManageConfig_RO.RestoreDestination);
}
if (_endResultCIO == CommonIO.endResult.Default)
_endResultLMZA = lmzaParser.ExtractPackage(
Path.GetFileName(_ManageConfig_RO.RestoreSource),
Path.GetDirectoryName(_ManageConfig_RO.RestoreSource),
_ManageConfig_RO.RestoreDestination,
"");
}
}
#endregion
#region Form Functionality
private bool canClose = false;
private bool canClose;
private void WorkerUI_Load(object sender, EventArgs e)
{
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+13 -3
View File
@@ -32,6 +32,8 @@ namespace MicronSync
NewRegKeyUI_InvalidKey,
NewRegKeyUI_PirateKey,
MainWindow_BadConfigFile,
MainWindow_BadConfigFile_FromEXE,
MainWindow_DirectoryNotFound,
}
/// <summary>
@@ -68,7 +70,7 @@ namespace MicronSync
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
case errCodes.MainWindow_DstWithinSrc:
MessageBox.Show($"Your destination and source paths cannot be within one-another. Please enter valid paths and try again.", "MicronSync",
MessageBox.Show($"You cannot create a backup inside of the folder you're tying to backup. Please enter a valid path and try again.", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
case errCodes.MainWindow_RestoreError:
@@ -91,6 +93,10 @@ namespace MicronSync
MessageBox.Show($"The backup file specified does not exist.", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
case errCodes.MainWindow_DirectoryNotFound:
MessageBox.Show($"The backup directory specified does not exist.", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
case errCodes.NewRegKeyUI_InvalidKey:
MessageBox.Show($"The key you have entered is invalid. Please ensure you have typed it in the correct format.", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Error);
@@ -100,7 +106,11 @@ namespace MicronSync
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
case errCodes.MainWindow_BadConfigFile:
MessageBox.Show($"Unable to load configuration, unsupported file.", "MicronSync",
MessageBox.Show($"Unsupported data.\nPlease only drop configs, directories or 7-Zip files!", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
case errCodes.MainWindow_BadConfigFile_FromEXE:
MessageBox.Show($"Unsupported data.\nOnly config files are supported when loaded directly from application!", "MicronSync",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
break;
}
@@ -136,7 +146,7 @@ namespace MicronSync
MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
case msgCodes.MainWindow_SaveChanges:
_dialogResult = MessageBox.Show($"Save changes to file before exiting?\n{info}", "MicronSync",
_dialogResult = MessageBox.Show($"There are currently unsaved changes, would you like to save before exiting?\n{info}", "MicronSync",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
break;
}
Binary file not shown.
+114 -30
View File
@@ -44,6 +44,8 @@
this.labelBackupDate = new System.Windows.Forms.Label();
this.tabControl = new System.Windows.Forms.TabControl();
this.tabBackup = new System.Windows.Forms.TabPage();
this.btnRepBackupDest = new System.Windows.Forms.Button();
this.btnRepBackupSource = new System.Windows.Forms.Button();
this.labelLastChange = new System.Windows.Forms.Label();
this.groupBackupOptions = new System.Windows.Forms.GroupBox();
this.labelMaxCompression = new System.Windows.Forms.Label();
@@ -55,6 +57,8 @@
this.labelBackupDest = new System.Windows.Forms.Label();
this.textBackupDest = new System.Windows.Forms.TextBox();
this.tabRestore = new System.Windows.Forms.TabPage();
this.btnRepRestoreDest = new System.Windows.Forms.Button();
this.btnRepRestoreSource = new System.Windows.Forms.Button();
this.labelLastBackup = new System.Windows.Forms.Label();
this.labelRestoreSource = new System.Windows.Forms.Label();
this.btnRestoreBrowseDest = new System.Windows.Forms.Button();
@@ -71,14 +75,16 @@
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.websiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.changelogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.registerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.enterDonationKeyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.labelDevBuild = new System.Windows.Forms.Label();
this.groupRestoreOptions.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trackBar)).BeginInit();
this.statusStrip.SuspendLayout();
@@ -210,7 +216,7 @@
//
this.tabControl.Controls.Add(this.tabBackup);
this.tabControl.Controls.Add(this.tabRestore);
this.tabControl.Location = new System.Drawing.Point(13, 64);
this.tabControl.Location = new System.Drawing.Point(12, 38);
this.tabControl.Multiline = true;
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
@@ -219,6 +225,8 @@
//
// tabBackup
//
this.tabBackup.Controls.Add(this.btnRepBackupDest);
this.tabBackup.Controls.Add(this.btnRepBackupSource);
this.tabBackup.Controls.Add(this.labelLastChange);
this.tabBackup.Controls.Add(this.groupBackupOptions);
this.tabBackup.Controls.Add(this.labelBackupSource);
@@ -237,6 +245,26 @@
this.tabBackup.Text = "Backup";
this.tabBackup.UseVisualStyleBackColor = true;
//
// btnRepBackupDest
//
this.btnRepBackupDest.Location = new System.Drawing.Point(366, 50);
this.btnRepBackupDest.Name = "btnRepBackupDest";
this.btnRepBackupDest.Size = new System.Drawing.Size(24, 20);
this.btnRepBackupDest.TabIndex = 31;
this.btnRepBackupDest.Text = ">";
this.btnRepBackupDest.UseVisualStyleBackColor = true;
this.btnRepBackupDest.Click += new System.EventHandler(this.btnRepBackupDest_Click);
//
// btnRepBackupSource
//
this.btnRepBackupSource.Location = new System.Drawing.Point(366, 12);
this.btnRepBackupSource.Name = "btnRepBackupSource";
this.btnRepBackupSource.Size = new System.Drawing.Size(24, 20);
this.btnRepBackupSource.TabIndex = 30;
this.btnRepBackupSource.Text = ">";
this.btnRepBackupSource.UseVisualStyleBackColor = true;
this.btnRepBackupSource.Click += new System.EventHandler(this.btnRepBackupSource_Click);
//
// labelLastChange
//
this.labelLastChange.AutoSize = true;
@@ -289,7 +317,7 @@
//
// btnBackupBrowseDest
//
this.btnBackupBrowseDest.Location = new System.Drawing.Point(360, 51);
this.btnBackupBrowseDest.Location = new System.Drawing.Point(334, 50);
this.btnBackupBrowseDest.Name = "btnBackupBrowseDest";
this.btnBackupBrowseDest.Size = new System.Drawing.Size(30, 20);
this.btnBackupBrowseDest.TabIndex = 5;
@@ -299,15 +327,15 @@
//
// textBackupSource
//
this.textBackupSource.Location = new System.Drawing.Point(84, 13);
this.textBackupSource.Location = new System.Drawing.Point(84, 12);
this.textBackupSource.Name = "textBackupSource";
this.textBackupSource.Size = new System.Drawing.Size(271, 20);
this.textBackupSource.Size = new System.Drawing.Size(244, 20);
this.textBackupSource.TabIndex = 2;
this.textBackupSource.TextChanged += new System.EventHandler(this.textBackupSource_TextChanged);
//
// btnBackupBrowseSource
//
this.btnBackupBrowseSource.Location = new System.Drawing.Point(360, 13);
this.btnBackupBrowseSource.Location = new System.Drawing.Point(334, 12);
this.btnBackupBrowseSource.Name = "btnBackupBrowseSource";
this.btnBackupBrowseSource.Size = new System.Drawing.Size(30, 20);
this.btnBackupBrowseSource.TabIndex = 3;
@@ -326,14 +354,17 @@
//
// textBackupDest
//
this.textBackupDest.Location = new System.Drawing.Point(84, 51);
this.textBackupDest.Location = new System.Drawing.Point(84, 50);
this.textBackupDest.Name = "textBackupDest";
this.textBackupDest.Size = new System.Drawing.Size(270, 20);
this.textBackupDest.Size = new System.Drawing.Size(244, 20);
this.textBackupDest.TabIndex = 4;
this.textBackupDest.TextChanged += new System.EventHandler(this.textBackupDest_TextChanged);
this.textBackupDest.Validating += new System.ComponentModel.CancelEventHandler(this.textBackupDest_Validating);
//
// tabRestore
//
this.tabRestore.Controls.Add(this.btnRepRestoreDest);
this.tabRestore.Controls.Add(this.btnRepRestoreSource);
this.tabRestore.Controls.Add(this.labelLastBackup);
this.tabRestore.Controls.Add(this.labelRestoreSource);
this.tabRestore.Controls.Add(this.btnRestoreBrowseDest);
@@ -352,6 +383,26 @@
this.tabRestore.Text = "Restore";
this.tabRestore.UseVisualStyleBackColor = true;
//
// btnRepRestoreDest
//
this.btnRepRestoreDest.Location = new System.Drawing.Point(366, 50);
this.btnRepRestoreDest.Name = "btnRepRestoreDest";
this.btnRepRestoreDest.Size = new System.Drawing.Size(24, 20);
this.btnRepRestoreDest.TabIndex = 33;
this.btnRepRestoreDest.Text = "<";
this.btnRepRestoreDest.UseVisualStyleBackColor = true;
this.btnRepRestoreDest.Click += new System.EventHandler(this.btnRepRestoreDest_Click);
//
// btnRepRestoreSource
//
this.btnRepRestoreSource.Location = new System.Drawing.Point(366, 12);
this.btnRepRestoreSource.Name = "btnRepRestoreSource";
this.btnRepRestoreSource.Size = new System.Drawing.Size(24, 20);
this.btnRepRestoreSource.TabIndex = 32;
this.btnRepRestoreSource.Text = "<";
this.btnRepRestoreSource.UseVisualStyleBackColor = true;
this.btnRepRestoreSource.Click += new System.EventHandler(this.btnRepRestoreSource_Click);
//
// labelLastBackup
//
this.labelLastBackup.AutoSize = true;
@@ -372,7 +423,7 @@
//
// btnRestoreBrowseDest
//
this.btnRestoreBrowseDest.Location = new System.Drawing.Point(360, 51);
this.btnRestoreBrowseDest.Location = new System.Drawing.Point(334, 50);
this.btnRestoreBrowseDest.Name = "btnRestoreBrowseDest";
this.btnRestoreBrowseDest.Size = new System.Drawing.Size(30, 20);
this.btnRestoreBrowseDest.TabIndex = 27;
@@ -382,15 +433,16 @@
//
// textRestoreSource
//
this.textRestoreSource.Location = new System.Drawing.Point(84, 13);
this.textRestoreSource.Location = new System.Drawing.Point(84, 12);
this.textRestoreSource.Name = "textRestoreSource";
this.textRestoreSource.Size = new System.Drawing.Size(271, 20);
this.textRestoreSource.Size = new System.Drawing.Size(244, 20);
this.textRestoreSource.TabIndex = 23;
this.textRestoreSource.TextChanged += new System.EventHandler(this.textRestoreSource_TextChanged);
this.textRestoreSource.Validating += new System.ComponentModel.CancelEventHandler(this.textRestoreSource_Validating);
//
// btnRestoreBrowseSource
//
this.btnRestoreBrowseSource.Location = new System.Drawing.Point(360, 13);
this.btnRestoreBrowseSource.Location = new System.Drawing.Point(334, 12);
this.btnRestoreBrowseSource.Name = "btnRestoreBrowseSource";
this.btnRestoreBrowseSource.Size = new System.Drawing.Size(30, 20);
this.btnRestoreBrowseSource.TabIndex = 26;
@@ -409,16 +461,17 @@
//
// textRestoreDest
//
this.textRestoreDest.Location = new System.Drawing.Point(84, 51);
this.textRestoreDest.Location = new System.Drawing.Point(84, 50);
this.textRestoreDest.Name = "textRestoreDest";
this.textRestoreDest.Size = new System.Drawing.Size(270, 20);
this.textRestoreDest.Size = new System.Drawing.Size(244, 20);
this.textRestoreDest.TabIndex = 25;
this.textRestoreDest.TextChanged += new System.EventHandler(this.textRestoreDest_TextChanged);
this.textRestoreDest.Validating += new System.ComponentModel.CancelEventHandler(this.textRestoreDest_Validating);
//
// labelDescription
//
this.labelDescription.AutoSize = true;
this.labelDescription.Location = new System.Drawing.Point(24, 35);
this.labelDescription.Location = new System.Drawing.Point(13, 265);
this.labelDescription.Name = "labelDescription";
this.labelDescription.Size = new System.Drawing.Size(63, 13);
this.labelDescription.TabIndex = 18;
@@ -426,7 +479,7 @@
//
// textDescription
//
this.textDescription.Location = new System.Drawing.Point(101, 32);
this.textDescription.Location = new System.Drawing.Point(104, 262);
this.textDescription.Name = "textDescription";
this.textDescription.Size = new System.Drawing.Size(311, 20);
this.textDescription.TabIndex = 0;
@@ -436,6 +489,7 @@
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.changelogToolStripMenuItem,
this.aboutToolStripMenuItem,
this.registerToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
@@ -462,19 +516,21 @@
// newToolStripMenuItem
//
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.newToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.newToolStripMenuItem.Text = "New";
this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6);
this.toolStripSeparator1.Size = new System.Drawing.Size(192, 6);
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.openToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.openToolStripMenuItem.Text = "Open...";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
@@ -482,29 +538,47 @@
//
this.saveToolStripMenuItem.Enabled = false;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.saveToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
// saveAsToolStripMenuItem
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.S)));
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.saveAsToolStripMenuItem.Text = "Save As...";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6);
this.toolStripSeparator2.Size = new System.Drawing.Size(192, 6);
//
// websiteToolStripMenuItem
//
this.websiteToolStripMenuItem.Name = "websiteToolStripMenuItem";
this.websiteToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.websiteToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.websiteToolStripMenuItem.Text = "Website...";
this.websiteToolStripMenuItem.Click += new System.EventHandler(this.websiteToolStripMenuItem_Click);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q)));
this.exitToolStripMenuItem.Size = new System.Drawing.Size(195, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
// changelogToolStripMenuItem
//
this.changelogToolStripMenuItem.Name = "changelogToolStripMenuItem";
this.changelogToolStripMenuItem.Size = new System.Drawing.Size(83, 20);
this.changelogToolStripMenuItem.Text = "Change Log";
this.changelogToolStripMenuItem.Click += new System.EventHandler(this.changelogToolStripMenuItem_Click);
//
// aboutToolStripMenuItem
//
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
@@ -518,8 +592,8 @@
this.enterDonationKeyToolStripMenuItem,
this.donateToolStripMenuItem});
this.registerToolStripMenuItem.Name = "registerToolStripMenuItem";
this.registerToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
this.registerToolStripMenuItem.Text = "Register";
this.registerToolStripMenuItem.Size = new System.Drawing.Size(69, 20);
this.registerToolStripMenuItem.Text = "[Register]";
//
// enterDonationKeyToolStripMenuItem
//
@@ -535,12 +609,15 @@
this.donateToolStripMenuItem.Text = "Donate...";
this.donateToolStripMenuItem.Click += new System.EventHandler(this.donateToolStripMenuItem_Click);
//
// saveAsToolStripMenuItem
// labelDevBuild
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.saveAsToolStripMenuItem.Text = "Save As...";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
this.labelDevBuild.AutoSize = true;
this.labelDevBuild.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelDevBuild.Location = new System.Drawing.Point(331, 6);
this.labelDevBuild.Name = "labelDevBuild";
this.labelDevBuild.Size = new System.Drawing.Size(96, 13);
this.labelDevBuild.TabIndex = 23;
this.labelDevBuild.Text = "Development Build";
//
// MainWindow
//
@@ -549,6 +626,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(434, 316);
this.Controls.Add(this.labelDevBuild);
this.Controls.Add(this.labelDescription);
this.Controls.Add(this.textDescription);
this.Controls.Add(this.tabControl);
@@ -633,6 +711,12 @@
private System.Windows.Forms.ToolStripMenuItem donateToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem websiteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem changelogToolStripMenuItem;
private System.Windows.Forms.Button btnRepBackupDest;
private System.Windows.Forms.Button btnRepBackupSource;
private System.Windows.Forms.Button btnRepRestoreDest;
private System.Windows.Forms.Button btnRepRestoreSource;
private System.Windows.Forms.Label labelDevBuild;
}
}
+272 -151
View File
@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
using MicronSync.Components.Forms;
namespace MicronSync
{
@@ -14,12 +15,9 @@ namespace MicronSync
public static string[] args { get; set; }
private readonly CommonIO _CommonIO = new CommonIO();
private readonly ParseUserInput _ParseUserInput = new ParseUserInput();
private bool isLoading = false;
private bool isLoading;
public MainWindow()
{
InitializeComponent();
}
public MainWindow() { InitializeComponent(); }
#region Startup events
@@ -31,23 +29,26 @@ namespace MicronSync
CreateTooltips();
ProcessLicence();
ProcessArgs(args);
labelDevBuild.Visible = false; // Comment out before releasing.
}
private void ProcessArgs(string[] args)
/// <summary>
/// Process args passed directly to the executable.
/// </summary>
/// <param name="args"></param>
private void ProcessArgs(IReadOnlyCollection<string> args)
{
List<string> listArgs = new List<string>();
if (args.Length > 0)
if (args.Count > 0)
{
foreach (var item in args)
{
listArgs.Add(" " + item);
}
string fullPath = String.Join(String.Empty, listArgs.ToArray())
.TrimStart()
.TrimEnd();
OpenConfig(false, fullPath);
OpenConfig(false, fullPath, true);
}
}
@@ -59,7 +60,6 @@ namespace MicronSync
{
Licencer _Licencer = new Licencer();
//Debug.WriteLine("DEBUG New key: " + _Licencer.CreateNewKey());
Licencer.isRegistered = _Licencer.CheckForExistingLicence();
if (!Licencer.isRegistered)
_Licencer.ShowDonationPrompt();
@@ -89,41 +89,46 @@ namespace MicronSync
"prior to restoring from the selected backup.");
toolTip.SetToolTip(chkBackup, "Enabling this option will create a backup of the restoration directory\n" +
"with the extension \".Backup\".");
toolTip.SetToolTip(btnRepBackupSource, "Replicate path to restore destination.");
toolTip.SetToolTip(btnRepBackupDest, "Replicate path to restore source.");
toolTip.SetToolTip(btnRepRestoreSource, "Replicate path to backup destination.");
toolTip.SetToolTip(btnRepRestoreDest, "Replicate path to backup source.");
}
#endregion
#region Functions
/// <summary>
/// Open an existing configuration file.
/// </summary>
/// <param name="file"></param>
/// <param name="fileToLoad"></param>
/// <param name="useFileSelector"></param>
private void OpenConfig(bool useFileSelector, string file)
private void OpenConfig(bool useFileSelector, string fileToLoad, bool fromExe)
{
isLoading = true;
///
string loadedFile;
// Load file selector if a file has already been specified.
if (useFileSelector)
loadedFile = _CommonIO.OpenFile(null, CommonIO.FileType.ini);
else
loadedFile = file;
// Load file selector if a file has not been specified.
string loadedFile = useFileSelector ? _CommonIO.OpenFile(null, CommonIO.FileType.ini) : fileToLoad;
if(!string.IsNullOrEmpty(loadedFile))
if (loadedFile.EndsWith(".ini"))
{
_MSConfig = new MSConfig();
_MSConfig.openFile = loadedFile;
_MSConfig = new MSConfig {openFile = loadedFile};
_MSConfig.Load();
UpdateWithConfig();
// Set titlebar name.
UpdateTitlebar = loadedFile;
UpdateStatus = "Load successful";
saveToolStripMenuItem.Enabled = true;
}
else
{ MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_BadConfigFile, null); }
///
if (!fromExe)
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_BadConfigFile, null);
else
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_BadConfigFile_FromEXE, null);
//
isLoading = false;
}
@@ -141,6 +146,8 @@ namespace MicronSync
trackBar.Value = _MSConfig.CompressionLevel;
chkBackup.Checked = _MSConfig.EnableBackup;
chkPurge.Checked = _MSConfig.EnablePurge;
_MSConfig.userModifiedConfig = false;
}
/// <summary>
@@ -153,69 +160,61 @@ namespace MicronSync
bool isSysArch64;
// Determine system architecture.
try
if (IntPtr.Size == 8)
{
if (IntPtr.Size == 8)
{
// x64
isSysArch64 = true;
Debug.Write("DEBUG: 64-bit system detected\n");
}
else
{
// x32
isSysArch64 = false;
Debug.Write("DEBUG: 32-bit system detected\n");
}
// x64
isSysArch64 = true;
Debug.Write("DEBUG: 64-bit system detected\n");
}
else
{
// x32
isSysArch64 = false;
Debug.Write("DEBUG: 32-bit system detected\n");
}
catch (Exception) { throw; }
// Check 7-zip is installed on system.
string sevenZipRegPath = @"SOFTWARE\7-Zip\";
string sevenZipRegValueName = "Path";
try
if (isSysArch64)
{
if (isSysArch64 == true)
{
// x64
var regPath64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var regKey64 = regPath64?.OpenSubKey(sevenZipRegPath);
var value64 = regKey64?.GetValue(sevenZipRegValueName);
// x64
var regPath64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var regKey64 = regPath64?.OpenSubKey(sevenZipRegPath);
var value64 = regKey64?.GetValue(sevenZipRegValueName);
if (File.Exists(value64 + "7z.exe"))
{
LMZAParser.szExePath = value64 + "7z.exe";
LMZAParser.szWorkDir = Convert.ToString(value64);
Debug.Write("DEBUG: 7-Zip exists\n");
}
else
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_SZNotInstalled, null);
errors++;
}
if (File.Exists(value64 + "7z.exe"))
{
LMZAParser.szExePath = value64 + "7z.exe";
LMZAParser.szWorkDir = Convert.ToString(value64);
Debug.Write("DEBUG: 7-Zip exists\n");
}
else
{
// x32
var regPath32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
var regKey32 = regPath32?.OpenSubKey(sevenZipRegPath);
var value32 = regKey32?.GetValue(sevenZipRegValueName);
if (File.Exists(value32 + "7z.exe"))
{
LMZAParser.szExePath = value32 + "7z.exe";
LMZAParser.szWorkDir = Convert.ToString(value32);
Debug.Write("DEBUG: 7-Zip exists\n");
}
else
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_SZNotInstalled, null);
errors++;
}
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_SZNotInstalled, null);
errors++;
}
}
else
{
// x32
var regPath32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
var regKey32 = regPath32?.OpenSubKey(sevenZipRegPath);
var value32 = regKey32?.GetValue(sevenZipRegValueName);
if (File.Exists(value32 + "7z.exe"))
{
LMZAParser.szExePath = value32 + "7z.exe";
LMZAParser.szWorkDir = Convert.ToString(value32);
Debug.Write("DEBUG: 7-Zip exists\n");
}
else
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_SZNotInstalled, null);
errors++;
}
}
catch (Exception) { throw; }
return errors;
}
@@ -226,11 +225,8 @@ namespace MicronSync
private void BackupButtonQualifier()
{
int count = 0;
if (!string.IsNullOrEmpty(_MSConfig.BackupSource))
count++;
if (!string.IsNullOrEmpty(_MSConfig.BackupDestination))
count++;
if (!string.IsNullOrEmpty(_MSConfig.BackupSource)) count++;
if (!string.IsNullOrEmpty(_MSConfig.BackupDestination)) count++;
if (count == 2)
{
@@ -250,11 +246,8 @@ namespace MicronSync
private void RestoreButtonQualifier()
{
int count = 0;
if (!string.IsNullOrEmpty(_MSConfig.RestoreSource))
count++;
if (!string.IsNullOrEmpty(_MSConfig.RestoreDestination))
count++;
if (!string.IsNullOrEmpty(_MSConfig.RestoreSource)) count++;
if (!string.IsNullOrEmpty(_MSConfig.RestoreDestination)) count++;
if (count == 2)
{
@@ -318,15 +311,11 @@ namespace MicronSync
break;
case CommonIO.endResult.Default:
break;
case CommonIO.endResult.FileNotExist:
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_ArchiveNotFound, null);
statusLabel.Text = "Failed to locate archive";
break;
default:
break;
}
}
#endregion
#region UI Functionality
private string UpdateStatus
@@ -358,16 +347,26 @@ namespace MicronSync
menuStrip1.Items.RemoveByKey("registerToolStripMenuItem");
}
/// <summary>
/// Show save changes dialog on exit.
/// </summary>
private void PromptSaveChanges()
{
// Only prompt if there are unsaved changes.
if (!_MSConfig.userModifiedConfig) return;
DialogResult result;
result = MessageHandler.stdMessage(MessageHandler.msgCodes.MainWindow_SaveChanges, _MSConfig.openFile);
if (!string.IsNullOrEmpty(_MSConfig.openFile))
// Save to currently open file or to new one if there isn't one loaded.
if (result == DialogResult.Yes)
{
result = MessageHandler.stdMessage(MessageHandler.msgCodes.MainWindow_SaveChanges, _MSConfig.openFile);
if (!string.IsNullOrEmpty( _MSConfig.openFile))
{ _MSConfig.Save(); }
else
{ _MSConfig.openFile =
_CommonIO.SaveFile(null, CommonIO.FileType.ini); }
if (result == DialogResult.Yes)
_MSConfig.Save();
_MSConfig.Save();
}
}
@@ -413,6 +412,31 @@ namespace MicronSync
RestoreButtonQualifier();
}
private void textRestoreDest_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
if (textRestoreDest.Text.EndsWith("\\"))
textRestoreDest.Text =
textRestoreDest.Text.Remove(textRestoreDest.Text.Length - 1);
}
private void textBackupDest_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
string t = textBackupDest.Text;
if (!t.EndsWith(".7z") && !t.EndsWith("\\"))
if (t.Length > 4)
textBackupDest.Text += ".7z";
}
private void textRestoreSource_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
string t = textRestoreSource.Text;
if (!t.EndsWith(".7z") && !t.EndsWith("\\"))
if(t.Length > 4)
textRestoreSource.Text += ".7z";
}
private void btnBackupBrowseSource_Click(object sender, EventArgs e)
{
textBackupSource.Text = _CommonIO.BrowseFolder(
@@ -473,7 +497,7 @@ namespace MicronSync
private void btnRestore_Click(object sender, EventArgs e)
{
bool errors =
_ParseUserInput.IsAllUserInputValid(
_ParseUserInput.IsValidationInvalid(
_MSConfig.RestoreSource,
_MSConfig.RestoreDestination,
false);
@@ -491,7 +515,7 @@ namespace MicronSync
private void btnBackup_Click(object sender, EventArgs e)
{
bool errors =
_ParseUserInput.IsAllUserInputValid(
_ParseUserInput.IsValidationInvalid(
_MSConfig.BackupSource,
_MSConfig.BackupDestination,
true);
@@ -506,20 +530,83 @@ namespace MicronSync
}
}
#region Drag and drop
private void MainWindow_DragEnter(object sender, DragEventArgs e)
{
BringToFront();
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Link;
}
private void MainWindow_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
OpenConfig(false, files[0]);
string[] allDropData = (string[])e.Data.GetData(DataFormats.FileDrop);
DropUI dropUi = new DropUI();
DropUI.dropData = allDropData[0];
dropUi.ShowDialog();
switch (dropUi.DropResult)
{
case DropUI.DropAction.SzUseRestore:
textRestoreSource.Text = DropUI.dropData;
tabControl.SelectedTab = tabRestore;
break;
case DropUI.DropAction.SzUseBackup:
textBackupDest.Text = DropUI.dropData;
tabControl.SelectedTab = tabBackup;
break;
case DropUI.DropAction.DirUseBackup:
textBackupSource.Text = DropUI.dropData;
tabControl.SelectedTab = tabBackup;
break;
case DropUI.DropAction.DirUseRestore:
textRestoreDest.Text = DropUI.dropData;
tabControl.SelectedTab = tabRestore;
break;
case DropUI.DropAction.LoadConfig:
OpenConfig(false, DropUI.dropData, false);
break;
case DropUI.DropAction.UnsupportedData:
break;
case DropUI.DropAction.Cancelled:
break;
}
}
#endregion
#region Path Replication
private void btnRepBackupSource_Click(object sender, EventArgs e)
{
textRestoreDest.Text = textBackupSource.Text;
tabControl.SelectedTab = tabRestore;
}
private void btnRepBackupDest_Click(object sender, EventArgs e)
{
textRestoreSource.Text = textBackupDest.Text;
tabControl.SelectedTab = tabRestore;
}
private void btnRepRestoreSource_Click(object sender, EventArgs e)
{
textBackupDest.Text = textRestoreSource.Text;
tabControl.SelectedTab = tabBackup;
}
private void btnRepRestoreDest_Click(object sender, EventArgs e)
{
textBackupSource.Text = textRestoreDest.Text;
tabControl.SelectedTab = tabBackup;
}
#endregion
#endregion
#region Menubar
private void newToolStripMenuItem_Click(object sender, EventArgs e)
@@ -528,17 +615,21 @@ namespace MicronSync
_MSConfig = new MSConfig();
UpdateWithConfig();
UpdateStatus = "New job";
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenConfig(true, null);
OpenConfig(true, null, false);
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(_MSConfig.openFile))
_MSConfig.Save();
UpdateStatus = "Save successful";
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
@@ -549,6 +640,7 @@ namespace MicronSync
{
_MSConfig.openFile = saveFile;
_MSConfig.Save();
UpdateStatus = "Save successful";
}
UpdateTitlebar = saveFile;
@@ -585,14 +677,21 @@ namespace MicronSync
Process.Start(DonationUI.websiteUrl);
}
private void changelogToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeLog cl = new ChangeLog();
cl.ShowDialog();
}
#endregion
#endregion
}
public partial class ParseUserInput
public class ParseUserInput
{
private readonly string[] restrictedDirs =
#region Private values
private readonly List<string> restrictedDirs = new List<string>
{
@"C:\Windows",
@"C:\Program",
@@ -602,83 +701,105 @@ namespace MicronSync
private readonly int minPathLength = 4;
private bool IsDirectoryAllowed (string input)
private bool IsDirectoryAllowed(string input)
{
int errors = 0;
int position = 0;
foreach (var dir in restrictedDirs)
{
if (input.StartsWith(restrictedDirs[position]))
if (input.StartsWith(dir))
errors++;
position++;
return errors == 0;
}
private bool IsDstWithinSrcPath(string path, string file)
{
var fileRoot = Path.GetDirectoryName(file);
return fileRoot.StartsWith(path);
}
#endregion
#region Validation
public bool IsValidationInvalid(string src, string dst, bool isBackupMode)
{
int errors = TestGeneralUserInput(src, dst);
if (isBackupMode)
errors += TestBackupUserInput(src, dst);
else
errors += TestRestoreUserInput(src);
// Prompt user to replace backup if one already exists.
if (errors == 0)
{
if (!isBackupMode) return errors != 0;
if (!File.Exists(dst)) return errors != 0;
DialogResult _dialogResult = MessageHandler.stdMessage(
MessageHandler.msgCodes.MainWindow_Warn_OverwriteFile, dst);
if (_dialogResult == DialogResult.No)
errors++;
else
File.Delete(dst);
}
bool result = false;
if (errors == 0)
result = true;
return result;
return errors != 0;
}
private bool IsDstWithinSrcPath (string src, string dst)
private int TestGeneralUserInput(string src, string dst)
{
bool result = false;
if (dst.StartsWith(src))
result = true;
int errors = 0;
return result;
}
public bool IsAllUserInputValid(string src, string dst, bool isBackupMode)
{
bool result = false;
// Test directories.
if (!IsDirectoryAllowed(src))
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_RestrictedPath,
src);
result = true;
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_RestrictedPath, src);
errors++;
}
else if (!IsDirectoryAllowed(dst))
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_RestrictedPath,
dst);
result = true;
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_RestrictedPath, dst);
errors++;
}
else if (src.Length < minPathLength ||
dst.Length < minPathLength)
else if (src.Length < minPathLength || dst.Length < minPathLength)
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_PathRootInvalid, null);
result = true;
errors++;
}
else if (IsDstWithinSrcPath(src, dst))
return errors;
}
private int TestRestoreUserInput(string src)
{
int errors = 0;
if (!File.Exists(src))
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_ArchiveNotFound, null);
errors++;
}
return errors;
}
private int TestBackupUserInput(string src, string dst)
{
int errors = 0;
if (IsDstWithinSrcPath(src, dst))
{
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_DstWithinSrc, null);
result = true;
errors++;
}
// Prompt user to replace backup if one already exists.
if (isBackupMode)
else if (!Directory.Exists(src))
{
if (File.Exists(dst))
{
DialogResult _dialogResult =
MessageHandler.stdMessage(MessageHandler.msgCodes.MainWindow_Warn_OverwriteFile, dst);
if (_dialogResult == DialogResult.Yes)
{
File.Delete(dst);
result = false;
}
else
result = true;
}
MessageHandler.errorMessage(MessageHandler.errCodes.MainWindow_DirectoryNotFound, null);
errors++;
}
return result;
return errors;
}
#endregion
}
}
+107 -31
View File
@@ -1,4 +1,5 @@
using System;
using System.ComponentModel;
using System.IO;
using System.Reflection;
@@ -7,8 +8,21 @@ namespace MicronSync
/// <summary>
/// Settings to store.
/// </summary>
public class Values
[Obfuscation(Exclude =true, ApplyToMembers = true)]
public class Values : INotifyPropertyChanged
{
/// <summary>
/// Flags value to be included in configuration.
/// </summary>
internal class SaveToConfigAttribute : Attribute { }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged()
{
PropertyChangedEventHandler handler = PropertyChanged;
userModifiedConfig = true;
}
[SaveToConfig]
public Version MSVersion
{
@@ -19,35 +33,104 @@ namespace MicronSync
}
[SaveToConfig]
public string Description { get; set; }
public string Description
{
get { return _Description; }
set
{
_Description = value;
OnPropertyChanged();
}
}
private string _Description;
[SaveToConfig]
public string BackupSource { get; set; }
public string BackupSource
{
get { return _BackupSource; }
set
{
_BackupSource = value;
OnPropertyChanged();
}
}
private string _BackupSource;
[SaveToConfig]
public string BackupDestination { get; set; }
public string BackupDestination
{
get { return _BackupDestination; }
set
{
_BackupDestination = value;
OnPropertyChanged();
}
}
private string _BackupDestination;
[SaveToConfig]
public string RestoreSource { get; set; }
public string RestoreSource
{
get { return _RestoreSource; }
set
{
_RestoreSource = value;
OnPropertyChanged();
}
}
private string _RestoreSource;
[SaveToConfig]
public string RestoreDestination { get; set; }
public string RestoreDestination
{
get { return _RestoreDestintation; }
set
{
_RestoreDestintation = value;
OnPropertyChanged();
}
}
private string _RestoreDestintation;
[SaveToConfig]
public bool EnablePurge { get; set; }
public bool EnablePurge
{
get { return _EnablePurge; }
set
{
_EnablePurge = value;
OnPropertyChanged();
}
}
private bool _EnablePurge;
[SaveToConfig]
public bool EnableBackup { get; set; }
public bool EnableBackup
{
get { return _EnableBackup; }
set
{
_EnableBackup = value;
OnPropertyChanged();
}
}
private bool _EnableBackup;
[SaveToConfig]
public int CompressionLevel { get; set; } = 4;
public int CompressionLevel
{
get { return _CompressionLevel; }
set
{
_CompressionLevel = value;
OnPropertyChanged();
}
}
private int _CompressionLevel = 4;
public string openFile { get; set; }
/// <summary>
/// Flags value to be included in configuration.
/// </summary>
internal class SaveToConfigAttribute : Attribute{}
public bool userModifiedConfig { get; set; } = false;
}
public class MSConfig : Values
@@ -64,13 +147,9 @@ namespace MicronSync
StreamWriter writer = new StreamWriter(openFile, true);
foreach (var item in GetType().GetProperties())
{
foreach (var attr in item.GetCustomAttributes(true))
{
if (item.GetValue(this) != null && item.CanRead)
writer.WriteLine(String.Format("{0}={1}",item.Name,item.GetValue(this)));
}
}
writer.WriteLine($"{item.Name}={item.GetValue(this)}");
writer.Close();
}
catch (Exception)
@@ -79,6 +158,7 @@ namespace MicronSync
errors++;
}
userModifiedConfig = false;
return errors;
}
@@ -88,25 +168,21 @@ namespace MicronSync
try
{
foreach (var item in GetType().GetProperties())
foreach (var attr in item.GetCustomAttributes(true))
{
foreach (var attr in item.GetCustomAttributes(true))
{
///
string line;
using (StreamReader reader = new StreamReader(openFile, true))
///
string line;
using (StreamReader reader = new StreamReader(openFile, true))
while (!string.IsNullOrEmpty(
line = reader.ReadLine()))
{
while (!string.IsNullOrEmpty(
line = reader.ReadLine()))
if (line.StartsWith(item.Name) && item.CanWrite)
{
if (line.StartsWith(item.Name) && item.CanWrite)
{
string readValue = line.ToString().Replace(item.Name, "").TrimStart('=');
item.SetValue(this, Convert.ChangeType(readValue, item.PropertyType));
}
string readValue = line.ToString().Replace(item.Name, "").TrimStart('=');
item.SetValue(this, Convert.ChangeType(readValue, item.PropertyType));
}
}
///
}
}
}
catch (Exception)
+32 -13
View File
@@ -92,32 +92,44 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Components\AboutBox.cs">
<Compile Include="Components\Forms\AboutBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\AboutBox.Designer.cs">
<Compile Include="Components\Forms\AboutBox.Designer.cs">
<DependentUpon>AboutBox.cs</DependentUpon>
</Compile>
<Compile Include="Components\CommonIO.cs" />
<Compile Include="Components\DonationUI.cs">
<Compile Include="Components\Forms\ChangeLog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\DonationUI.Designer.cs">
<Compile Include="Components\Forms\ChangeLog.Designer.cs">
<DependentUpon>ChangeLog.cs</DependentUpon>
</Compile>
<Compile Include="Components\CommonIO.cs" />
<Compile Include="Components\Forms\DonationUI.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\Forms\DonationUI.Designer.cs">
<DependentUpon>DonationUI.cs</DependentUpon>
</Compile>
<Compile Include="Components\Forms\DropUI.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\Forms\DropUI.Designer.cs">
<DependentUpon>DropUI.cs</DependentUpon>
</Compile>
<Compile Include="Components\Licencer.cs" />
<Compile Include="Components\LMZAParser.cs" />
<Compile Include="Components\MessageHandler.cs" />
<Compile Include="Components\NewRegKeyUI.cs">
<Compile Include="Components\Forms\NewRegKeyUI.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\NewRegKeyUI.Designer.cs">
<Compile Include="Components\Forms\NewRegKeyUI.Designer.cs">
<DependentUpon>NewRegKeyUI.cs</DependentUpon>
</Compile>
<Compile Include="Components\WorkerUI.cs">
<Compile Include="Components\Forms\WorkerUI.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Components\WorkerUI.Designer.cs">
<Compile Include="Components\Forms\WorkerUI.Designer.cs">
<DependentUpon>WorkerUI.cs</DependentUpon>
</Compile>
<Compile Include="MainWindow.cs">
@@ -129,16 +141,22 @@
<Compile Include="ManageCfg.cs" />
<Compile Include="Startup.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Components\AboutBox.resx">
<EmbeddedResource Include="Components\Forms\AboutBox.resx">
<DependentUpon>AboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Components\DonationUI.resx">
<EmbeddedResource Include="Components\Forms\ChangeLog.resx">
<DependentUpon>ChangeLog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Components\Forms\DonationUI.resx">
<DependentUpon>DonationUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Components\NewRegKeyUI.resx">
<EmbeddedResource Include="Components\Forms\DropUI.resx">
<DependentUpon>DropUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Components\Forms\NewRegKeyUI.resx">
<DependentUpon>NewRegKeyUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Components\WorkerUI.resx">
<EmbeddedResource Include="Components\Forms\WorkerUI.resx">
<DependentUpon>WorkerUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainWindow.resx">
@@ -169,6 +187,7 @@
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Components\Forms\ChangeLog.txt" />
<Content Include="MicronSync.ico" />
<None Include="SKGL.dll" />
</ItemGroup>
+2 -2
View File
@@ -33,7 +33,7 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.1.0.1")]
[assembly: AssemblyFileVersion("1.1.0.1")]
[assembly: NeutralResourcesLanguage("en-GB")]
Binary file not shown.
Binary file not shown.