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 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 // HashSet with archive extensions that need to be tested before extraction
public static HashSet<string> TestArchivesBeforeExtraction = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {".dat"}; 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")) else if (source.EndsWith(".omod"))
ExtractAllWithOMOD(source, dest); ExtractAllWithOMOD(source, dest);
else if (source.EndsWith(".exe")) else if (source.EndsWith(".exe"))
ExtractAllWithInno(source, dest); ExtractAllEXE(source, dest);
else else
ExtractAllWith7Zip(source, dest); 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)}"); Utils.Log($"Extracting {Path.GetFileName(source)}");
var info = new ProcessStartInfo var info = new ProcessStartInfo
@ -225,8 +233,11 @@ namespace Wabbajack.VirtualFileSystem
if(ext != ".exe" && !Consts.TestArchivesBeforeExtraction.Contains(ext)) if(ext != ".exe" && !Consts.TestArchivesBeforeExtraction.Contains(ext))
return Consts.SupportedArchives.Contains(ext) || Consts.SupportedBSAs.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 var info = new ProcessStartInfo
{ {
FileName = @"Extractors\innounp.exe", FileName = @"Extractors\innounp.exe",
@ -260,11 +271,12 @@ namespace Wabbajack.VirtualFileSystem
return p.ExitCode == 0; return p.ExitCode == 0;
} }
public static bool TestWith7z(string file)
{
var testInfo = new ProcessStartInfo var testInfo = new ProcessStartInfo
{ {
FileName = @"Extractors\7z.exe", FileName = @"Extractors\7z.exe",
Arguments = $"t \"{v}\"", Arguments = $"t \"{file}\"",
RedirectStandardError = true, RedirectStandardError = true,
RedirectStandardInput = true, RedirectStandardInput = true,
RedirectStandardOutput = true, RedirectStandardOutput = true,
@ -282,6 +294,7 @@ namespace Wabbajack.VirtualFileSystem
} }
catch (Exception) catch (Exception)
{ {
return false;
} }
try try
@ -292,12 +305,15 @@ namespace Wabbajack.VirtualFileSystem
if (line == null) if (line == null)
break; break;
} }
} catch (Exception){} }
catch (Exception)
testP.WaitForExitAndWarn(TimeSpan.FromSeconds(30), $"Can Extract Check {v}"); {
return testP.ExitCode == 0; return false;
} }
testP.WaitForExitAndWarn(TimeSpan.FromSeconds(30), $"Can Extract Check {file}");
return testP.ExitCode == 0;
}
public static bool MightBeArchive(string path) public static bool MightBeArchive(string path)
{ {