diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs
index e0877ee8..8107a7ee 100644
--- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs
+++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs
@@ -139,6 +139,9 @@ namespace Wabbajack.Lib.ModListRegistry
public int Passed { get; set; }
[JsonProperty("updating")]
public int Updating { get; set; }
+
+ [JsonProperty("mirrored")]
+ public int Mirrored { get; set; }
[JsonProperty("link")]
public string Link => $"/lists/status/{MachineURL}.json";
diff --git a/Wabbajack.Server/Controllers/ListsStatus.cs b/Wabbajack.Server/Controllers/ListsStatus.cs
index 355bbbc1..e6993d3f 100644
--- a/Wabbajack.Server/Controllers/ListsStatus.cs
+++ b/Wabbajack.Server/Controllers/ListsStatus.cs
@@ -102,6 +102,18 @@ namespace Wabbajack.BuildServer.Controllers
{{/each}}
+
Mirrored ({{mirrored.Count}}):
+
+ {{each $.mirrored }}
+ {{if $.HasUrl}}
+ - {{$.Name}}
+ {{else}}
+ - {{$.Name}}
+ {{/if}}
+
+ {{/each}}
+
+
Updating ({{updating.Count}}):
{{each $.updating }}
@@ -141,6 +153,7 @@ namespace Wabbajack.BuildServer.Controllers
passed = lst.Archives.Where(a => !a.IsFailing).ToList(),
updated = lst.Archives.Where(a => a.ArchiveStatus == ArchiveStatus.Updated).ToList(),
updating = lst.Archives.Where(a => a.ArchiveStatus == ArchiveStatus.Updating).ToList(),
+ mirrored = lst.Archives.Where(a => a.ArchiveStatus == ArchiveStatus.Mirrored).ToList()
});
return new ContentResult
{
diff --git a/Wabbajack.Server/DTOs/ArchiveStatus.cs b/Wabbajack.Server/DTOs/ArchiveStatus.cs
index 98c9c9bf..8bfb2da6 100644
--- a/Wabbajack.Server/DTOs/ArchiveStatus.cs
+++ b/Wabbajack.Server/DTOs/ArchiveStatus.cs
@@ -6,5 +6,6 @@
InValid,
Updating,
Updated,
+ Mirrored
}
}
diff --git a/Wabbajack.Server/DTOs/ValidationData.cs b/Wabbajack.Server/DTOs/ValidationData.cs
index f8b4e260..3206f610 100644
--- a/Wabbajack.Server/DTOs/ValidationData.cs
+++ b/Wabbajack.Server/DTOs/ValidationData.cs
@@ -12,5 +12,6 @@ namespace Wabbajack.Server.DTOs
public List ModLists { get; set; }
public ConcurrentHashSet<(Game Game, long ModId)> SlowQueriedFor { get; set; } = new ConcurrentHashSet<(Game Game, long ModId)>();
+ public HashSet Mirrors { get; set; }
}
}
diff --git a/Wabbajack.Server/DataLayer/ValidationData.cs b/Wabbajack.Server/DataLayer/ValidationData.cs
index b7f9a889..e2f25af3 100644
--- a/Wabbajack.Server/DataLayer/ValidationData.cs
+++ b/Wabbajack.Server/DataLayer/ValidationData.cs
@@ -17,11 +17,13 @@ namespace Wabbajack.Server.DataLayer
var nexusFiles = AllNexusFiles();
var archiveStatus = AllModListArchivesStatus();
var modLists = AllModLists();
+ var mirrors = GetAllMirroredHashes();
return new ValidationData
{
NexusFiles = new ConcurrentHashSet<(long Game, long ModId, long FileId)>((await nexusFiles).Select(f => (f.NexusGameId, f.ModId, f.FileId))),
ArchiveStatus = await archiveStatus,
ModLists = await modLists,
+ Mirrors = await mirrors,
};
}
diff --git a/Wabbajack.Server/Services/ListValidator.cs b/Wabbajack.Server/Services/ListValidator.cs
index 5d89d18f..500c9006 100644
--- a/Wabbajack.Server/Services/ListValidator.cs
+++ b/Wabbajack.Server/Services/ListValidator.cs
@@ -56,13 +56,19 @@ namespace Wabbajack.Server.Services
{
var (_, result) = await ValidateArchive(data, archive);
if (result == ArchiveStatus.InValid)
+ {
+ if (data.Mirrors.Contains(archive.Hash))
+ return (archive, ArchiveStatus.Mirrored);
return await TryToHeal(data, archive, metadata);
+ }
+
return (archive, result);
});
var failedCount = archives.Count(f => f.Item2 == ArchiveStatus.InValid);
var passCount = archives.Count(f => f.Item2 == ArchiveStatus.Valid || f.Item2 == ArchiveStatus.Updated);
var updatingCount = archives.Count(f => f.Item2 == ArchiveStatus.Updating);
+ var mirroredCount = archives.Count(f => f.Item2 == ArchiveStatus.Mirrored);
var summary = new ModListSummary
{
@@ -70,6 +76,7 @@ namespace Wabbajack.Server.Services
Failed = failedCount,
Passed = passCount,
Updating = updatingCount,
+ Mirrored = mirroredCount,
MachineURL = metadata.Links.MachineURL,
Name = metadata.Title,
};
@@ -84,7 +91,7 @@ namespace Wabbajack.Server.Services
Archives = archives.Select(a => new DetailedStatusItem
{
Archive = a.Item1,
- IsFailing = a.Item2 == ArchiveStatus.InValid || a.Item2 == ArchiveStatus.Updating,
+ IsFailing = a.Item2 == ArchiveStatus.InValid,
ArchiveStatus = a.Item2
}).ToList()
};