From e32be7581684519cb30fd8bb3e89dd15504e5ae3 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Mon, 23 Dec 2019 16:05:00 -0700 Subject: [PATCH 1/2] Don't use such a big BA2 file for recompression --- Compression.BSA.Test/BSATests.cs | 3 ++- Wabbajack.Test/EndToEndTests.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Compression.BSA.Test/BSATests.cs b/Compression.BSA.Test/BSATests.cs index be6fb3f9..ddb764a8 100644 --- a/Compression.BSA.Test/BSATests.cs +++ b/Compression.BSA.Test/BSATests.cs @@ -44,7 +44,8 @@ namespace Compression.BSA.Test (Game.SkyrimSpecialEdition, 12604), // SkyUI (Game.Skyrim, 3863), // SkyUI (Game.Skyrim, 51473), // iNeed - (Game.Fallout4, 22223) // 10mm SMG + //(Game.Fallout4, 22223) // 10mm SMG + (Game.Fallout4, 4472) // True Storms }; await Task.WhenAll(modIDs.Select(async (info) => diff --git a/Wabbajack.Test/EndToEndTests.cs b/Wabbajack.Test/EndToEndTests.cs index af0b1f81..d120ede9 100644 --- a/Wabbajack.Test/EndToEndTests.cs +++ b/Wabbajack.Test/EndToEndTests.cs @@ -31,7 +31,7 @@ namespace Wabbajack.Test utils = new TestUtils(); utils.Game = Game.SkyrimSpecialEdition; - Utils.LogMessages.Subscribe(f => TestContext.WriteLine(f.ToString())); + Utils.LogMessages.Subscribe(f => TestContext.WriteLine($"{DateTime.Now} - {f}")); if (!Directory.Exists(DOWNLOAD_FOLDER)) Directory.CreateDirectory(DOWNLOAD_FOLDER); From 878b1759b2fbc861701ceae44054af4864c8a120 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Mon, 23 Dec 2019 16:28:47 -0700 Subject: [PATCH 2/2] Make file copying parallel during compilation --- Wabbajack.Common/Utils.cs | 7 +++++++ Wabbajack.Lib/AInstaller.cs | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Wabbajack.Common/Utils.cs b/Wabbajack.Common/Utils.cs index f7cfcbc1..c4224973 100644 --- a/Wabbajack.Common/Utils.cs +++ b/Wabbajack.Common/Utils.cs @@ -311,6 +311,13 @@ namespace Wabbajack.Common } } + public static Task PDoIndexed(this IEnumerable coll, WorkQueue queue, Action f) + { + return coll.Zip(Enumerable.Range(0, int.MaxValue), (v, idx) => (v, idx)) + .PMap(queue, vs=> f(vs.idx, vs.v)); + } + + /// /// Loads INI data from the given filename and returns a dynamic type that diff --git a/Wabbajack.Lib/AInstaller.cs b/Wabbajack.Lib/AInstaller.cs index b87f9058..ce4550d4 100644 --- a/Wabbajack.Lib/AInstaller.cs +++ b/Wabbajack.Lib/AInstaller.cs @@ -130,10 +130,10 @@ namespace Wabbajack.Lib .ToList(); Info("Installing Archives"); - await archives.PMap(Queue, UpdateTracker,a => InstallArchive(a.Archive, a.AbsolutePath, grouped[a.Archive.Hash])); + await archives.PMap(Queue, UpdateTracker,a => InstallArchive(Queue, a.Archive, a.AbsolutePath, grouped[a.Archive.Hash])); } - private async Task InstallArchive(Archive archive, string absolutePath, IGrouping grouping) + private async Task InstallArchive(WorkQueue queue, Archive archive, string absolutePath, IGrouping grouping) { Status($"Extracting {archive.Name}"); @@ -176,8 +176,8 @@ namespace Wabbajack.Lib File.SetLastWriteTime(to, DateTime.Now); } - vFiles.GroupBy(f => f.FromFile) - .DoIndexed((idx, group) => + await vFiles.GroupBy(f => f.FromFile) + .PDoIndexed(queue, (idx, group) => { Utils.Status("Installing files", idx * 100 / vFiles.Count); var firstDest = Path.Combine(OutputFolder, group.First().To);