Merge pull request #694 from erri120/issue-693

Extraction Fixes
This commit is contained in:
Timothy Baldridge 2020-04-09 14:24:08 -06:00 committed by GitHub
commit ea1d275a16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 34 deletions

View File

@ -20,7 +20,7 @@ namespace Wabbajack.Common
public static string MegaPrefix = "https://mega.nz/#!";
public static HashSet<string> SupportedArchives = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {".zip", ".rar", ".7z", ".7zip", ".fomod", ".omod", ".exe", ".dat"};
public static HashSet<string> SupportedArchives = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {".zip", ".rar", ".7z", ".7zip", ".fomod", ".omod", ".exe", ".dat", ".gz", ".tar"};
// HashSet with archive extensions that need to be tested before extraction
public static HashSet<string> TestArchivesBeforeExtraction = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {".dat"};

View File

@ -25,7 +25,7 @@ namespace Wabbajack.VirtualFileSystem
else if (source.EndsWith(".omod"))
ExtractAllWithOMOD(source, dest);
else if (source.EndsWith(".exe"))
ExtractAllWithInno(source, dest);
ExtractAllEXE(source, dest);
else
ExtractAllWith7Zip(source, dest);
}
@ -35,8 +35,16 @@ namespace Wabbajack.VirtualFileSystem
}
}
private static void ExtractAllWithInno(string source, string dest)
private static void ExtractAllEXE(string source, string dest)
{
var isArchive = TestWith7z(source);
if (isArchive)
{
ExtractAllWith7Zip(source, dest);
return;
}
Utils.Log($"Extracting {Path.GetFileName(source)}");
var info = new ProcessStartInfo
@ -225,8 +233,11 @@ namespace Wabbajack.VirtualFileSystem
if(ext != ".exe" && !Consts.TestArchivesBeforeExtraction.Contains(ext))
return Consts.SupportedArchives.Contains(ext) || Consts.SupportedBSAs.Contains(ext);
if (ext == ".exe")
{
var isArchive = TestWith7z(v);
if (isArchive)
return true;
var info = new ProcessStartInfo
{
FileName = @"Extractors\innounp.exe",
@ -260,11 +271,12 @@ namespace Wabbajack.VirtualFileSystem
return p.ExitCode == 0;
}
public static bool TestWith7z(string file)
{
var testInfo = new ProcessStartInfo
{
FileName = @"Extractors\7z.exe",
Arguments = $"t \"{v}\"",
Arguments = $"t \"{file}\"",
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
@ -282,6 +294,7 @@ namespace Wabbajack.VirtualFileSystem
}
catch (Exception)
{
return false;
}
try
@ -292,12 +305,15 @@ namespace Wabbajack.VirtualFileSystem
if (line == null)
break;
}
} catch (Exception){}
testP.WaitForExitAndWarn(TimeSpan.FromSeconds(30), $"Can Extract Check {v}");
return testP.ExitCode == 0;
}
catch (Exception)
{
return false;
}
testP.WaitForExitAndWarn(TimeSpan.FromSeconds(30), $"Can Extract Check {file}");
return testP.ExitCode == 0;
}
public static bool MightBeArchive(string path)
{