From 4377f430f3b095a9cfd994b0db963686b3f2e0e0 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Mon, 3 Feb 2020 21:58:32 -0700 Subject: [PATCH] Fixes for sql for unicode paths in sql tables (instead of ascitables :facepalm:) --- .../Models/Jobs/ReindexArchives.cs | 10 ++++++---- Wabbajack.BuildServer/sql/wabbajack_db.sql | Bin 28858 -> 31784 bytes Wabbajack.Common/Utils.cs | 13 +++++++++++++ Wabbajack.Test/EndToEndTests.cs | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Wabbajack.BuildServer/Models/Jobs/ReindexArchives.cs b/Wabbajack.BuildServer/Models/Jobs/ReindexArchives.cs index 678b22ed..c04befa6 100644 --- a/Wabbajack.BuildServer/Models/Jobs/ReindexArchives.cs +++ b/Wabbajack.BuildServer/Models/Jobs/ReindexArchives.cs @@ -18,18 +18,20 @@ namespace Wabbajack.BuildServer.Models.Jobs { using (var queue = new WorkQueue()) { - var total_count = Directory.EnumerateFiles(settings.ArchiveDir).Count(); + var files = Directory.EnumerateFiles(settings.ArchiveDir) + .Where(f => !f.EndsWith(Consts.HashFileExtension)) + .ToList(); + var total_count = files.Count; int completed = 0; - await Directory.EnumerateFiles(settings.ArchiveDir) - .PMap(queue, async file => + await files.PMap(queue, async file => { try { Interlocked.Increment(ref completed); - if (await sql.HaveIndexdFile(await file.FileHashAsync())) + if (await sql.HaveIndexdFile(await file.FileHashCachedAsync())) { Utils.Log($"({completed}/{total_count}) Skipping {Path.GetFileName(file)}, it's already indexed"); return; diff --git a/Wabbajack.BuildServer/sql/wabbajack_db.sql b/Wabbajack.BuildServer/sql/wabbajack_db.sql index 64c514d524012915579fcbebf572ded57e2b5e5c..cc1e84f06f5c40e72bc9d4f2e9c20a088af46581 100644 GIT binary patch literal 31784 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 FileHashCachedAsync(this string file, bool nullOnIOError = false) + { + var hashPath = file + Consts.HashFileExtension; + if (File.Exists(hashPath) && File.GetLastWriteTime(file) <= File.GetLastWriteTime(hashPath)) + { + return File.ReadAllText(hashPath); + } + + var hash = await file.FileHashAsync(nullOnIOError); + File.WriteAllText(hashPath, hash); + return hash; + } public static async Task FileHashAsync(this string file, bool nullOnIOError = false) { diff --git a/Wabbajack.Test/EndToEndTests.cs b/Wabbajack.Test/EndToEndTests.cs index f7717658..e98687f1 100644 --- a/Wabbajack.Test/EndToEndTests.cs +++ b/Wabbajack.Test/EndToEndTests.cs @@ -62,6 +62,7 @@ namespace Wabbajack.Test }); await DownloadAndInstall(Game.SkyrimSpecialEdition, 12604, "SkyUI"); + await DownloadAndInstall(Game.Fallout4, 11925, "Anti-Tank Rifle"); utils.Configure();