Diagnostic info on 7zip failure

This commit is contained in:
Timothy Baldridge 2020-11-01 21:35:44 -07:00
parent 4a2cef1ab4
commit f67fd93272

View File

@ -8,7 +8,9 @@ using System.Reactive.Subjects;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Alphaleonis.Win32.Filesystem; using Alphaleonis.Win32.Filesystem;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using Wabbajack.Common; using Wabbajack.Common;
using Wabbajack.Common.StatusFeed.Errors;
using Wabbajack.VirtualFileSystem.ExtractedFiles; using Wabbajack.VirtualFileSystem.ExtractedFiles;
using Directory = Alphaleonis.Win32.Filesystem.Directory; using Directory = Alphaleonis.Win32.Filesystem.Directory;
using File = System.IO.File; using File = System.IO.File;
@ -224,15 +226,28 @@ namespace Wabbajack.VirtualFileSystem
if (filesByParent.TryGetValue(file, out var children)) if (filesByParent.TryGetValue(file, out var children))
{ {
var fileNames = children.ToDictionary(c => c.RelativeName); var fileNames = children.ToDictionary(c => c.RelativeName);
await FileExtractor2.GatheringExtract(queue, sfn, try
r => fileNames.ContainsKey(r), {
async (rel, csf) => await FileExtractor2.GatheringExtract(queue, sfn,
r => fileNames.ContainsKey(r),
async (rel, csf) =>
{
await HandleFile(fileNames[rel], csf);
return 0;
},
tempFolder: tempFolder,
onlyFiles: fileNames.Keys.ToHashSet());
}
catch (_7zipReturnError ex)
{
await using var stream = await sfn.GetStream();
var hash = await stream.xxHashAsync();
if (hash != file.Hash)
{ {
await HandleFile(fileNames[rel], csf); throw new Exception($"File {file.FullPath} is corrupt, please delete it and retry the installation");
return 0; }
}, throw;
tempFolder: tempFolder, }
onlyFiles: fileNames.Keys.ToHashSet());
} }
} }