Show extraction progress.
This commit is contained in:
@@ -4,6 +4,9 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AndroidSideloader.Utilities
|
||||
@@ -12,13 +15,13 @@ namespace AndroidSideloader.Utilities
|
||||
{
|
||||
public static void ExtractFile(string sourceArchive, string destination)
|
||||
{
|
||||
string args = $"x \"{sourceArchive}\" -y -o\"{destination}\"";
|
||||
string args = $"x \"{sourceArchive}\" -y -o\"{destination}\" -bsp1";
|
||||
DoExtract(args);
|
||||
}
|
||||
|
||||
public static void ExtractFile(string sourceArchive, string destination, string password)
|
||||
{
|
||||
string args = $"x \"{sourceArchive}\" -y -o\"{destination}\" -p\"{password}\"";
|
||||
string args = $"x \"{sourceArchive}\" -y -o\"{destination}\" -p\"{password}\" -bsp1";
|
||||
DoExtract(args);
|
||||
}
|
||||
|
||||
@@ -32,6 +35,7 @@ namespace AndroidSideloader.Utilities
|
||||
client.DownloadFile("https://github.com/VRPirates/rookie/raw/master/7z.dll", "7z.dll");
|
||||
_ = Logger.Log("Complete download 7-zip");
|
||||
}
|
||||
|
||||
ProcessStartInfo pro = new ProcessStartInfo
|
||||
{
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
@@ -46,23 +50,52 @@ namespace AndroidSideloader.Utilities
|
||||
|
||||
_ = Logger.Log($"Extract: 7z {string.Join(" ", args.Split(' ').Where(a => !a.StartsWith("-p")))}");
|
||||
|
||||
Process x = Process.Start(pro);
|
||||
x.WaitForExit();
|
||||
if (x.ExitCode != 0)
|
||||
using (Process x = new Process())
|
||||
{
|
||||
string error = x.StandardError.ReadToEnd();
|
||||
x.StartInfo = pro;
|
||||
|
||||
if (error.Contains("There is not enough space on the disk"))
|
||||
if (MainForm.isInDownloadExtract && x != null)
|
||||
{
|
||||
_ = FlexibleMessageBox.Show(Program.form, $"Not enough space to extract archive.\r\nMake sure your {Path.GetPathRoot(Properties.Settings.Default.downloadDir)} drive has at least double the space of the game, then try again.",
|
||||
"NOT ENOUGH SPACE",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Error);
|
||||
x.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data != null)
|
||||
{
|
||||
var match = Regex.Match(e.Data, @"(\d+)%");
|
||||
if (match.Success)
|
||||
{
|
||||
int progress = int.Parse(match.Groups[1].Value);
|
||||
MainForm mainForm = (MainForm)Application.OpenForms[0];
|
||||
if (mainForm != null)
|
||||
{
|
||||
mainForm.Invoke((Action)(() => mainForm.SetProgress(progress)));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
x.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data);
|
||||
|
||||
x.Start();
|
||||
|
||||
x.BeginOutputReadLine();
|
||||
x.BeginErrorReadLine();
|
||||
x.WaitForExit();
|
||||
if (x.ExitCode != 0)
|
||||
{
|
||||
string error = x.StandardError.ReadToEnd();
|
||||
|
||||
if (error.Contains("There is not enough space on the disk"))
|
||||
{
|
||||
_ = FlexibleMessageBox.Show(Program.form, $"Not enough space to extract archive.\r\nMake sure your {Path.GetPathRoot(Properties.Settings.Default.downloadDir)} drive has at least double the space of the game, then try again.",
|
||||
"NOT ENOUGH SPACE",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Error);
|
||||
}
|
||||
_ = Logger.Log(x.StandardOutput.ReadToEnd());
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
throw new ApplicationException($"Extracting failed, status code {x.ExitCode}");
|
||||
}
|
||||
_ = Logger.Log(x.StandardOutput.ReadToEnd());
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
throw new ApplicationException($"Extracting failed, status code {x.ExitCode}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user