mirror of
https://github.com/StudentBlake/XCI-Explorer
synced 2024-11-22 04:03:04 +00:00
Added background worker for extracting NCAs
This commit is contained in:
parent
690fcc70a7
commit
ed5c20000d
3 changed files with 109 additions and 56 deletions
|
@ -16,5 +16,5 @@ using System.Runtime.Versioning;
|
|||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: Guid("206c6c47-87b1-477f-b6e6-f7e7c1a92f8f")]
|
||||
[assembly: AssemblyFileVersion("1.2.2.0")]
|
||||
[assembly: AssemblyVersion("1.2.2.0")]
|
||||
[assembly: AssemblyFileVersion("1.2.2.1")]
|
||||
[assembly: AssemblyVersion("1.2.2.1")]
|
||||
|
|
|
@ -99,6 +99,7 @@ namespace XCI_Explorer
|
|||
private Label LB_ExpectedHash;
|
||||
private Label LB_ActualHash;
|
||||
private Label LB_HashedRegionSize;
|
||||
private BackgroundWorker backgroundWorker1;
|
||||
private Button B_TrimXCI;
|
||||
|
||||
public MainForm()
|
||||
|
@ -511,7 +512,10 @@ namespace XCI_Explorer
|
|||
|
||||
LB_DataOffset.Text = "Offset: 0x" + selectedOffset.ToString("X");
|
||||
LB_SelectedData.Text = e.Node.Text;
|
||||
B_Extract.Enabled = true;
|
||||
if (backgroundWorker1.IsBusy != true)
|
||||
{
|
||||
B_Extract.Enabled = true;
|
||||
}
|
||||
string[] array = new string[5]
|
||||
{
|
||||
"B",
|
||||
|
@ -684,23 +688,16 @@ namespace XCI_Explorer
|
|||
saveFileDialog.FileName = LB_SelectedData.Text;
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
using (FileStream fileStream = File.OpenRead(TB_File.Text))
|
||||
if (backgroundWorker1.IsBusy != true)
|
||||
{
|
||||
using (FileStream fileStream2 = File.OpenWrite(saveFileDialog.FileName))
|
||||
{
|
||||
new BinaryReader(fileStream);
|
||||
new BinaryWriter(fileStream2);
|
||||
fileStream.Position = selectedOffset;
|
||||
byte[] buffer = new byte[8192];
|
||||
long num = selectedSize;
|
||||
int num2;
|
||||
while ((num2 = fileStream.Read(buffer, 0, 8192)) > 0 && num > 0)
|
||||
{
|
||||
fileStream2.Write(buffer, 0, num2);
|
||||
num -= num2;
|
||||
}
|
||||
fileStream.Close();
|
||||
}
|
||||
B_Extract.Enabled = false;
|
||||
B_LoadROM.Enabled = false;
|
||||
B_TrimXCI.Enabled = false;
|
||||
|
||||
// Start the asynchronous operation.
|
||||
backgroundWorker1.RunWorkerAsync(saveFileDialog.FileName);
|
||||
|
||||
MessageBox.Show("Extracting NCA\nPlease wait...");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -787,6 +784,90 @@ namespace XCI_Explorer
|
|||
}
|
||||
}
|
||||
|
||||
private void LB_ExpectedHash_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
BetterTreeNode betterTreeNode = (BetterTreeNode)TV_Partitions.SelectedNode;
|
||||
if (betterTreeNode.Offset != -1)
|
||||
{
|
||||
Clipboard.SetText(betterTreeNode.ExpectedHash);
|
||||
}
|
||||
}
|
||||
|
||||
private void LB_ActualHash_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
BetterTreeNode betterTreeNode = (BetterTreeNode)TV_Partitions.SelectedNode;
|
||||
if (betterTreeNode.Offset != -1)
|
||||
{
|
||||
Clipboard.SetText(betterTreeNode.ActualHash);
|
||||
}
|
||||
}
|
||||
|
||||
private void TB_File_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (backgroundWorker1.IsBusy != true)
|
||||
{
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
TB_File.Text = files[0];
|
||||
ProcessFile();
|
||||
}
|
||||
}
|
||||
|
||||
private void TB_File_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (backgroundWorker1.IsBusy != true)
|
||||
{
|
||||
if (e.Data.GetDataPresent(DataFormats.FileDrop))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
|
||||
{
|
||||
BackgroundWorker worker = sender as BackgroundWorker;
|
||||
string fileName = (string)e.Argument;
|
||||
|
||||
using (FileStream fileStream = File.OpenRead(TB_File.Text))
|
||||
{
|
||||
using (FileStream fileStream2 = File.OpenWrite(fileName))
|
||||
{
|
||||
new BinaryReader(fileStream);
|
||||
new BinaryWriter(fileStream2);
|
||||
fileStream.Position = selectedOffset;
|
||||
byte[] buffer = new byte[8192];
|
||||
long num = selectedSize;
|
||||
int num2;
|
||||
while ((num2 = fileStream.Read(buffer, 0, 8192)) > 0 && num > 0)
|
||||
{
|
||||
fileStream2.Write(buffer, 0, num2);
|
||||
num -= num2;
|
||||
}
|
||||
fileStream.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
B_Extract.Enabled = true;
|
||||
B_LoadROM.Enabled = true;
|
||||
B_TrimXCI.Enabled = true;
|
||||
|
||||
if (e.Error != null)
|
||||
{
|
||||
MessageBox.Show("Error: " + e.Error.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Done extracting NCA!");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
|
@ -842,6 +923,7 @@ namespace XCI_Explorer
|
|||
this.LB_DataOffset = new System.Windows.Forms.Label();
|
||||
this.LB_SelectedData = new System.Windows.Forms.Label();
|
||||
this.TV_Partitions = new System.Windows.Forms.TreeView();
|
||||
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
|
||||
this.TABC_Main.SuspendLayout();
|
||||
this.TABP_XCI.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
|
@ -1290,6 +1372,11 @@ namespace XCI_Explorer
|
|||
this.TV_Partitions.TabIndex = 0;
|
||||
this.TV_Partitions.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TV_Partitions_AfterSelect);
|
||||
//
|
||||
// backgroundWorker1
|
||||
//
|
||||
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
|
||||
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
|
@ -1316,42 +1403,5 @@ namespace XCI_Explorer
|
|||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
private void LB_ExpectedHash_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
BetterTreeNode betterTreeNode = (BetterTreeNode)TV_Partitions.SelectedNode;
|
||||
if (betterTreeNode.Offset != -1)
|
||||
{
|
||||
Clipboard.SetText(betterTreeNode.ExpectedHash);
|
||||
}
|
||||
}
|
||||
|
||||
private void LB_ActualHash_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
BetterTreeNode betterTreeNode = (BetterTreeNode)TV_Partitions.SelectedNode;
|
||||
if (betterTreeNode.Offset != -1)
|
||||
{
|
||||
Clipboard.SetText(betterTreeNode.ActualHash);
|
||||
}
|
||||
}
|
||||
|
||||
private void TB_File_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
TB_File.Text = files[0];
|
||||
ProcessFile();
|
||||
}
|
||||
|
||||
private void TB_File_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (e.Data.GetDataPresent(DataFormats.FileDrop))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,4 +117,7 @@
|
|||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
Loading…
Reference in a new issue