diff --git a/Wabbajack.BuildServer/BackendServices/ABackendService.cs b/Wabbajack.BuildServer/BackendServices/ABackendService.cs index 6b451552..c72eff95 100644 --- a/Wabbajack.BuildServer/BackendServices/ABackendService.cs +++ b/Wabbajack.BuildServer/BackendServices/ABackendService.cs @@ -19,6 +19,7 @@ namespace Wabbajack.BuildServer.BackendServices public async Task RunLoop(CancellationToken token) { + Utils.Log($"Starting loop for {GetType()}"); while (!token.IsCancellationRequested) { try @@ -27,7 +28,7 @@ namespace Wabbajack.BuildServer.BackendServices } catch (Exception ex) { - Utils.Log($"Error executing {this}"); + Utils.Log($"Error executing {GetType()}"); Utils.Log(ex.ToString()); } diff --git a/Wabbajack.BuildServer/BackendServices/ValidateNonNexusArchives.cs b/Wabbajack.BuildServer/BackendServices/ValidateNonNexusArchives.cs index 71123770..4d79c299 100644 --- a/Wabbajack.BuildServer/BackendServices/ValidateNonNexusArchives.cs +++ b/Wabbajack.BuildServer/BackendServices/ValidateNonNexusArchives.cs @@ -1,7 +1,9 @@ using System; +using System.Linq; using System.Threading.Tasks; using Wabbajack.BuildServer.Model.Models; using Wabbajack.Common; +using Wabbajack.Lib.Downloaders; namespace Wabbajack.BuildServer.BackendServices { @@ -13,8 +15,11 @@ namespace Wabbajack.BuildServer.BackendServices public override async Task Execute() { + Utils.Log("Updating Non Nexus archives"); var archives = await Sql.GetNonNexusModlistArchives(); + Utils.Log($"Validating {archives.Count} Non-Nexus archives."); using var queue = new WorkQueue(); + await DownloadDispatcher.PrepareAll(archives.Select(a => a.State)); var results = await archives.PMap(queue, async archive => { try @@ -22,8 +27,9 @@ namespace Wabbajack.BuildServer.BackendServices var isValid = await archive.State.Verify(archive); return (Archive: archive, IsValid: isValid); } - catch (Exception) + catch (Exception ex) { + Utils.Log($"Got Validation error {ex}"); return (Archive: archive, IsValid: false); } diff --git a/Wabbajack.BuildServer/JobManager.cs b/Wabbajack.BuildServer/JobManager.cs index 8c6a5266..c3166352 100644 --- a/Wabbajack.BuildServer/JobManager.cs +++ b/Wabbajack.BuildServer/JobManager.cs @@ -78,8 +78,10 @@ namespace Wabbajack.BuildServer Utils.LogMessages.OfType().Subscribe(u => u.Cancel()); if (!Settings.JobScheduler) return; + var token = new CancellationTokenSource(); var task = RunNexusCacheLoop(); - var listIngest = (new ListIngest(Sql, Settings)).RunLoop(CancellationToken.None); + var listIngest = (new ListIngest(Sql, Settings)).RunLoop(token.Token); + var nonNexus = (new ValidateNonNexusArchives(Sql, Settings)).RunLoop(token.Token); while (true) { diff --git a/Wabbajack.Test/DownloaderTests.cs b/Wabbajack.Test/DownloaderTests.cs index b891adfc..3c329963 100644 --- a/Wabbajack.Test/DownloaderTests.cs +++ b/Wabbajack.Test/DownloaderTests.cs @@ -310,6 +310,34 @@ namespace Wabbajack.Test Assert.Equal("Cheese for Everyone!", await filename.Path.ReadAllTextAsync()); } + [Fact] + public async Task LoversLabDownloadWithKnownDelay() + { + await DownloadDispatcher.GetInstance().Prepare(); + var ini = @"[General] + directURL=https://www.loverslab.com/files/file/8567-ds3-weapon-pack-se/?do=download&r=692238&confirm=1&t=1"; + + var state = (AbstractDownloadState)await DownloadDispatcher.ResolveArchive(ini.LoadIniString()); + + Assert.NotNull(state); + + var converted = RoundTripState(state); + Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20})); + + // Verify with different Size + Assert.False(await converted.Verify(new Archive(state: null!) { Size = 15})); + + + using var filename = new TempFile(); + Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List() })); + + await converted.Download(new Archive(state: null!) { Name = "Known Loverslab delay" }, filename.Path); + + Assert.Equal(Hash.FromBase64("eSIyd+KOG3s="), await filename.Path.FileHashAsync()); + + Assert.Equal("Cheese for Everyone!", await filename.Path.ReadAllTextAsync()); + } + [Fact] public async Task VectorPlexusDownload() {