mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-22 12:33:12 +00:00
Extract files in a seperate thread
This commit is contained in:
parent
b11e913240
commit
08fee34f07
1 changed files with 65 additions and 37 deletions
|
@ -2,7 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using Toolbox.Library.Forms;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
|
@ -90,56 +90,84 @@ namespace Toolbox.Library
|
|||
progressBar.StartPosition = FormStartPosition.CenterScreen;
|
||||
progressBar.Show();
|
||||
|
||||
var Collection = TreeViewExtensions.Collect(Nodes);
|
||||
|
||||
int Curfile = 0;
|
||||
foreach (TreeNode node in Collection)
|
||||
Thread Thread = new Thread((ThreadStart)(() =>
|
||||
{
|
||||
ArchiveFileInfo file = null;
|
||||
var Collection = TreeViewExtensions.Collect(Nodes).ToList();
|
||||
Console.WriteLine($"Collection {Collection.Count}");
|
||||
|
||||
if (node.Tag != null && node.Tag is ArchiveFileInfo)
|
||||
file = (ArchiveFileInfo)node.Tag;
|
||||
else if (node is ArchiveFileWrapper)
|
||||
file = ((ArchiveFileWrapper)node).ArchiveFileInfo;
|
||||
|
||||
if (file != null)
|
||||
int Curfile = 0;
|
||||
foreach (TreeNode node in Collection)
|
||||
{
|
||||
string FilePath = file.FileName;
|
||||
string FolderPath = Path.GetDirectoryName(FilePath.RemoveIllegaleFolderNameCharacters());
|
||||
string FolderPathDir = Path.Combine(overridePath, FolderPath);
|
||||
if (progressBar.IsDisposed || progressBar.Disposing) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!Directory.Exists(FolderPathDir))
|
||||
Directory.CreateDirectory(FolderPathDir);
|
||||
ArchiveFileInfo file = null;
|
||||
|
||||
string FileName = Path.GetFileName(file.FileName).RemoveIllegaleFileNameCharacters();
|
||||
if (node.Tag != null && node.Tag is ArchiveFileInfo)
|
||||
file = (ArchiveFileInfo)node.Tag;
|
||||
else if (node is ArchiveFileWrapper)
|
||||
file = ((ArchiveFileWrapper)node).ArchiveFileInfo;
|
||||
|
||||
FilePath = Path.Combine(FolderPath, FileName);
|
||||
if (file != null)
|
||||
{
|
||||
string FilePath = file.FileName;
|
||||
string FolderPath = Path.GetDirectoryName(FilePath.RemoveIllegaleFolderNameCharacters());
|
||||
string FolderPathDir = Path.Combine(overridePath, FolderPath);
|
||||
|
||||
if (ParentPath != string.Empty)
|
||||
FilePath = FilePath.Replace(ParentPath, string.Empty);
|
||||
if (!Directory.Exists(FolderPathDir))
|
||||
Directory.CreateDirectory(FolderPathDir);
|
||||
|
||||
var path = $"{overridePath}/{FilePath}";
|
||||
string FileName = Path.GetFileName(file.FileName).RemoveIllegaleFileNameCharacters();
|
||||
|
||||
progressBar.Task = $"Extracting File {FileName}";
|
||||
progressBar.Value = (Curfile++ * 100) / Collection.Count();
|
||||
progressBar.Refresh();
|
||||
CreateDirectoryIfExists($"{path}");
|
||||
FilePath = Path.Combine(FolderPath, FileName);
|
||||
|
||||
filesExtracted.Add($"{path}");
|
||||
if (ParentPath != string.Empty)
|
||||
FilePath = FilePath.Replace(ParentPath, string.Empty);
|
||||
|
||||
if (file.FileFormat != null && file.FileFormat.CanSave)
|
||||
file.SaveFileFormat();
|
||||
var path = $"{overridePath}/{FilePath}";
|
||||
|
||||
if (file.FileDataStream != null)
|
||||
file.FileDataStream.ExportToFile(path);
|
||||
else
|
||||
File.WriteAllBytes($"{path}", file.FileData);
|
||||
if (progressBar.InvokeRequired)
|
||||
{
|
||||
progressBar.Invoke((MethodInvoker)delegate {
|
||||
// Running on the UI thread
|
||||
progressBar.Task = $"Extracting File {FileName}";
|
||||
progressBar.Value = (Curfile++ * 100) / Collection.Count;
|
||||
progressBar.Refresh();
|
||||
});
|
||||
}
|
||||
|
||||
CreateDirectoryIfExists($"{path}");
|
||||
|
||||
filesExtracted.Add($"{path}");
|
||||
|
||||
if (file.FileFormat != null && file.FileFormat.CanSave)
|
||||
file.SaveFileFormat();
|
||||
|
||||
if (file.FileDataStream != null)
|
||||
file.FileDataStream.ExportToFile(path);
|
||||
else
|
||||
File.WriteAllBytes($"{path}", file.FileData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
progressBar.Value = 100;
|
||||
progressBar.Refresh();
|
||||
progressBar.Close();
|
||||
if (progressBar.InvokeRequired)
|
||||
{
|
||||
progressBar.Invoke((MethodInvoker)delegate {
|
||||
progressBar.Value = 100;
|
||||
progressBar.Refresh();
|
||||
progressBar.Close();
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
progressBar.Value = 100;
|
||||
progressBar.Refresh();
|
||||
progressBar.Close();
|
||||
}
|
||||
|
||||
}));
|
||||
Thread.Start();
|
||||
|
||||
return filesExtracted.ToArray();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue