From 4d3961a0bc2c677b514fc45f1f0f0ada9ee0e967 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Thu, 16 Jul 2020 06:28:05 -0600 Subject: [PATCH] Fixes for broken archives names on server links --- Wabbajack.Server.Test/sql/wabbajack_db.sql | 1 + Wabbajack.Server/Controllers/ListsStatus.cs | 40 ++++++++++++++++++--- Wabbajack.Server/DTOs/DetailedStatus.cs | 6 ++++ Wabbajack.Server/DataLayer/ModLists.cs | 12 +++++-- 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Wabbajack.Server.Test/sql/wabbajack_db.sql b/Wabbajack.Server.Test/sql/wabbajack_db.sql index 87ec6831..b76c82e1 100644 --- a/Wabbajack.Server.Test/sql/wabbajack_db.sql +++ b/Wabbajack.Server.Test/sql/wabbajack_db.sql @@ -345,6 +345,7 @@ GO CREATE TABLE [dbo].[ModListArchives]( [MachineUrl] [nvarchar](50) NOT NULL, +[Name] [nvarchar](max), [Hash] [bigint] NOT NULL, [PrimaryKeyString] [nvarchar](max) NOT NULL, [Size] [bigint] NOT NULL, diff --git a/Wabbajack.Server/Controllers/ListsStatus.cs b/Wabbajack.Server/Controllers/ListsStatus.cs index 91e4fa3f..54a1efb8 100644 --- a/Wabbajack.Server/Controllers/ListsStatus.cs +++ b/Wabbajack.Server/Controllers/ListsStatus.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging; using Nettle; using Wabbajack.Common; using Wabbajack.Common.Serialization.Json; +using Wabbajack.Lib; using Wabbajack.Lib.ModListRegistry; using Wabbajack.Server; using Wabbajack.Server.DataLayer; @@ -76,28 +77,50 @@ namespace Wabbajack.BuildServer.Controllers private static readonly Func HandleGetListTemplate = NettleEngine.GetCompiler().Compile(@"

{{lst.Name}} - {{lst.Checked}} - {{ago}}min ago

+

Failed ({{failed.Count}}):

+ +

Updated ({{updated.Count}}):

+

Updating ({{updating.Count}}):

+

Passed ({{passed.Count}}):

@@ -109,6 +132,7 @@ namespace Wabbajack.BuildServer.Controllers { var lst = await DetailedStatus(Name); + var response = HandleGetListTemplate(new { lst, @@ -135,9 +159,15 @@ namespace Wabbajack.BuildServer.Controllers private async Task DetailedStatus(string Name) { - return _validator.Summaries + var results = _validator.Summaries .Select(d => d.Detailed) .FirstOrDefault(d => d.MachineName == Name); + results!.Archives.Do(itm => + { + if (string.IsNullOrWhiteSpace(itm.Archive.Name)) + itm.Archive.Name = itm.Archive.State.PrimaryKeyString; + }); + return results; } [HttpGet] diff --git a/Wabbajack.Server/DTOs/DetailedStatus.cs b/Wabbajack.Server/DTOs/DetailedStatus.cs index e4a62860..86c47cee 100644 --- a/Wabbajack.Server/DTOs/DetailedStatus.cs +++ b/Wabbajack.Server/DTOs/DetailedStatus.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Newtonsoft.Json; using Wabbajack.Common.Serialization.Json; using Wabbajack.Lib; using Wabbajack.Lib.ModListRegistry; @@ -23,6 +24,11 @@ namespace Wabbajack.Server.DTOs public bool IsFailing { get; set; } public Archive Archive { get; set; } + public string Name => string.IsNullOrWhiteSpace(Archive.Name) ? Archive.State.PrimaryKeyString : Archive.Name; + public string Url => Archive.State.GetManifestURL(Archive); + + [JsonIgnore] + public bool HasUrl => Url != null; public ArchiveStatus ArchiveStatus { get; set; } } } diff --git a/Wabbajack.Server/DataLayer/ModLists.cs b/Wabbajack.Server/DataLayer/ModLists.cs index 4d83c129..4f527f7d 100644 --- a/Wabbajack.Server/DataLayer/ModLists.cs +++ b/Wabbajack.Server/DataLayer/ModLists.cs @@ -39,6 +39,7 @@ namespace Wabbajack.Server.DataLayer new { MachineUrl = metadata.Links.MachineURL, + Name = a.Name, Hash = a.Hash, Size = a.Size, State = a.State.ToJson(), @@ -51,7 +52,7 @@ namespace Wabbajack.Server.DataLayer foreach (var entry in entries) { await conn.ExecuteAsync( - "INSERT INTO dbo.ModListArchives (MachineURL, Hash, Size, PrimaryKeyString, State) VALUES (@MachineURL, @Hash, @Size, @PrimaryKeyString, @State)", + "INSERT INTO dbo.ModListArchives (MachineURL, Name, Hash, Size, PrimaryKeyString, State) VALUES (@MachineURL, @Name, @Hash, @Size, @PrimaryKeyString, @State)", entry, tran); } @@ -78,9 +79,14 @@ namespace Wabbajack.Server.DataLayer public async Task> ModListArchives(string machineURL) { await using var conn = await Open(); - var archives = await conn.QueryAsync<(Hash, long, AbstractDownloadState)>("SELECT Hash, Size, State FROM dbo.ModListArchives WHERE MachineUrl = @MachineUrl", + var archives = await conn.QueryAsync<(string, Hash, long, AbstractDownloadState)>("SELECT Name, Hash, Size, State FROM dbo.ModListArchives WHERE MachineUrl = @MachineUrl", new {MachineUrl = machineURL}); - return archives.Select(t => new Archive(t.Item3) {Size = t.Item2, Hash = t.Item1}).ToList(); + return archives.Select(t => new Archive(t.Item4) + { + Name = string.IsNullOrWhiteSpace(t.Item1) ? t.Item4.PrimaryKeyString : t.Item1, + Size = t.Item3, + Hash = t.Item2 + }).ToList(); } } }