From 74c4360da97f964f1a4633bf4d959c5a1d28b979 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Mon, 27 Jul 2020 21:30:25 -0600 Subject: [PATCH] Extraction fixes --- Wabbajack.VirtualFileSystem/ExtractedBSAFile.cs | 2 +- Wabbajack.VirtualFileSystem/ExtractedDiskFile.cs | 4 ++-- Wabbajack.VirtualFileSystem/FileExtractor.cs | 7 ++++++- Wabbajack.VirtualFileSystem/IExtractedFile.cs | 2 +- Wabbajack.VirtualFileSystem/VirtualFile.cs | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Wabbajack.VirtualFileSystem/ExtractedBSAFile.cs b/Wabbajack.VirtualFileSystem/ExtractedBSAFile.cs index 694a5a2a..8dd37a06 100644 --- a/Wabbajack.VirtualFileSystem/ExtractedBSAFile.cs +++ b/Wabbajack.VirtualFileSystem/ExtractedBSAFile.cs @@ -37,7 +37,7 @@ namespace Wabbajack.VirtualFileSystem return false; } - public Task ExtractAll(WorkQueue queue, IEnumerable OnlyFiles) + public Task ExtractAll(WorkQueue queue, IEnumerable OnlyFiles, bool throwOnError) { throw new Exception("BSAs can't contain archives"); } diff --git a/Wabbajack.VirtualFileSystem/ExtractedDiskFile.cs b/Wabbajack.VirtualFileSystem/ExtractedDiskFile.cs index 76fe3721..aa440980 100644 --- a/Wabbajack.VirtualFileSystem/ExtractedDiskFile.cs +++ b/Wabbajack.VirtualFileSystem/ExtractedDiskFile.cs @@ -33,9 +33,9 @@ namespace Wabbajack.VirtualFileSystem return await FileExtractor.CanExtract(_path); } - public Task ExtractAll(WorkQueue queue, IEnumerable onlyFiles) + public Task ExtractAll(WorkQueue queue, IEnumerable onlyFiles, bool throwOnError) { - return FileExtractor.ExtractAll(queue, _path, onlyFiles); + return FileExtractor.ExtractAll(queue, _path, onlyFiles, throwOnError); } public async Task MoveTo(AbsolutePath path) diff --git a/Wabbajack.VirtualFileSystem/FileExtractor.cs b/Wabbajack.VirtualFileSystem/FileExtractor.cs index 1f595eaf..310a5527 100644 --- a/Wabbajack.VirtualFileSystem/FileExtractor.cs +++ b/Wabbajack.VirtualFileSystem/FileExtractor.cs @@ -27,7 +27,7 @@ namespace Wabbajack.VirtualFileSystem Definitions.FileType.RAR, Definitions.FileType._7Z); - public static async Task ExtractAll(WorkQueue queue, AbsolutePath source, IEnumerable OnlyFiles = null) + public static async Task ExtractAll(WorkQueue queue, AbsolutePath source, IEnumerable OnlyFiles = null, bool throwOnError = true) { try { @@ -35,6 +35,8 @@ namespace Wabbajack.VirtualFileSystem if (source.Extension == Consts.OMOD) return await ExtractAllWithOMOD(source); + + Utils.Log($"Extracting {sig}"); switch (sig) { @@ -53,6 +55,9 @@ namespace Wabbajack.VirtualFileSystem } catch (Exception ex) { + if (!throwOnError) + return new ExtractedFiles(await TempFolder.Create()); + Utils.ErrorThrow(ex, $"Error while extracting {source}"); throw new Exception(); } diff --git a/Wabbajack.VirtualFileSystem/IExtractedFile.cs b/Wabbajack.VirtualFileSystem/IExtractedFile.cs index f9660274..27fa9678 100644 --- a/Wabbajack.VirtualFileSystem/IExtractedFile.cs +++ b/Wabbajack.VirtualFileSystem/IExtractedFile.cs @@ -16,7 +16,7 @@ namespace Wabbajack.VirtualFileSystem public Task CanExtract(); - public Task ExtractAll(WorkQueue queue, IEnumerable Only = null); + public Task ExtractAll(WorkQueue queue, IEnumerable Only = null, bool throwOnError = false); public Task MoveTo(AbsolutePath path); diff --git a/Wabbajack.VirtualFileSystem/VirtualFile.cs b/Wabbajack.VirtualFileSystem/VirtualFile.cs index f5823b6d..8d962349 100644 --- a/Wabbajack.VirtualFileSystem/VirtualFile.cs +++ b/Wabbajack.VirtualFileSystem/VirtualFile.cs @@ -233,7 +233,7 @@ namespace Wabbajack.VirtualFileSystem try { - await using var extracted = await extractedFile.ExtractAll(context.Queue); + await using var extracted = await extractedFile.ExtractAll(context.Queue, throwOnError:false); var list = await extracted .PMap(context.Queue,