diff --git a/ModLinks.cs b/ModLinks.cs
index 9e03114..406cccb 100644
--- a/ModLinks.cs
+++ b/ModLinks.cs
@@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Xml;
+using System.Xml.Schema;
using System.Xml.Serialization;
namespace ModlinksShaVerifier;
@@ -19,7 +21,7 @@ public record Manifest
private Links? _links;
private Link? _link;
- public string Name { get; set; } = null!;
+ public string? Name { get; set; }
[XmlElement]
public Link? Link
@@ -45,11 +47,6 @@ public override string ToString()
+ $"\t{nameof(Links)}: {(object?) _link ?? Links},\n"
+ "}";
}
-
- public override int GetHashCode()
- {
- return HashCode.Combine(Name, Links);
- }
}
public record Links
@@ -78,7 +75,7 @@ public IEnumerable AsEnumerable()
}
}
-public record Link
+public record Link : IXmlSerializable
{
[XmlAttribute]
public string SHA256 = null!;
@@ -90,6 +87,19 @@ public override string ToString()
{
return $"[Link: {nameof(SHA256)} = {SHA256}, {nameof(URL)}: {URL}]";
}
+
+ public XmlSchema? GetSchema() => null;
+
+ public void ReadXml(XmlReader reader)
+ {
+ var sha256 = reader.GetAttribute(nameof(SHA256));
+ SHA256 = sha256 ?? throw new InvalidDataException("SHA256 attribute not found");
+ URL = reader.ReadElementContentAsString().Trim();
+ }
+
+ public void WriteXml(XmlWriter writer)
+ {
+ }
}
[Serializable]
diff --git a/Program.cs b/Program.cs
index 94cd95b..059b4b5 100755
--- a/Program.cs
+++ b/Program.cs
@@ -53,14 +53,6 @@ private static async Task CheckSingleSha(Manifest m)
return res.All(x => x);
}
- private static void TrimManifest(ref Manifest m)
- {
- foreach (var link in m.Links.AsEnumerable())
- {
- link.URL = link.URL.Trim();
- }
- }
-
internal static async Task Main(string[] args)
{
var sw = new Stopwatch();
@@ -101,11 +93,11 @@ await Console.Error.WriteLineAsync(
if (currentReader.NodeType != XmlNodeType.Element)
continue;
- if (currentReader.Name != "Manifest")
+ if (currentReader.Name != nameof(Manifest))
continue;
var currentManifest = (Manifest?)serializer.Deserialize(currentReader) ?? throw new InvalidDataException();
- TrimManifest(ref currentManifest);
+ currentManifest.Name ??= nameof(ApiLinks);
checkedLinksDict.Add(currentManifest.Name, currentManifest.Links);
}
@@ -116,12 +108,11 @@ await Console.Error.WriteLineAsync(
if (incomingReader.NodeType != XmlNodeType.Element)
continue;
- if (incomingReader.Name != "Manifest")
+ if (incomingReader.Name != nameof(Manifest))
continue;
var incomingManifest = (Manifest?)serializer.Deserialize(incomingReader) ?? throw new InvalidDataException();
- TrimManifest(ref incomingManifest);
-
+ incomingManifest.Name ??= nameof(ApiLinks);
if (checkedLinksDict.TryGetValue(incomingManifest.Name, out var checkedLinks))
{
if (checkedLinks != incomingManifest.Links)
@@ -139,7 +130,7 @@ await Console.Error.WriteLineAsync(
sw.Stop();
- Console.WriteLine($"Checked {checks.Count} mods in {sw.ElapsedMilliseconds}ms.");
+ Console.WriteLine($"Checked {checks.Count} manifests in {sw.ElapsedMilliseconds}ms.");
// If they're not all correct, error.
return !res.All(x => x) ? 1 : 0;