Fixes for broken archives names on server links

This commit is contained in:
Timothy Baldridge 2020-07-16 06:28:05 -06:00
parent 8999179920
commit 4d3961a0bc
4 changed files with 51 additions and 8 deletions

View File

@ -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,

View File

@ -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<object, string> HandleGetListTemplate = NettleEngine.GetCompiler().Compile(@"
<html><body>
<h2>{{lst.Name}} - {{lst.Checked}} - {{ago}}min ago</h2>
<h3>Failed ({{failed.Count}}):</h3>
<ul>
{{each $.failed }}
<li>{{$.Archive.Name}}</li>
{{if $.HasUrl}}
<a href='{{$.Url}}'><li>{{$.Name}}</li></a>
{{else}}
<li>{{$.Name}}</li>
{{/if}}
{{/each}}
</ul>
<h3>Updated ({{updated.Count}}):</h3>
<ul>
{{each $.updated }}
<li>{{$.Archive.Name}}</li>
{{if $.HasUrl}}
<a href='{{$.Url}}'><li>{{$.Name}}</li></a>
{{else}}
<li>{{$.Name}}</li>
{{/if}}
{{/each}}
</ul>
<h3>Updating ({{updating.Count}}):</h3>
<ul>
{{each $.updating }}
<li>{{$.Archive.Name}}</li>
{{if $.HasUrl}}
<a href='{{$.Url}}'><li>{{$.Name}}</li></a>
{{else}}
<li>{{$.Name}}</li>
{{/if}}
{{/each}}
</ul>
<h3>Passed ({{passed.Count}}):</h3>
<ul>
{{each $.passed }}
<li>{{$.Archive.Name}}</li>
{{if $.HasUrl}}
<a href='{{$.Url}}'><li>{{$.Name}}</li></a>
{{else}}
<li>{{$.Name}}</li>
{{/if}}
{{/each}}
</ul>
</body></html>
@ -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> 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]

View File

@ -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; }
}
}

View File

@ -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<List<Archive>> 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();
}
}
}