summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/LogParsing
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-08-08 22:27:07 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-08-08 22:27:07 -0400
commitd813c4e2c8522584beaf1432725b4cdd2cc251b5 (patch)
treedd7ce212182e773d826c955d3e1deaa7cbcdec40 /src/SMAPI.Web/Framework/LogParsing
parente376386d250780c50f17c40f82419128b4e7beab (diff)
downloadSMAPI-d813c4e2c8522584beaf1432725b4cdd2cc251b5.tar.gz
SMAPI-d813c4e2c8522584beaf1432725b4cdd2cc251b5.tar.bz2
SMAPI-d813c4e2c8522584beaf1432725b4cdd2cc251b5.zip
fix log parsing for invalid content packs (#860)
Diffstat (limited to 'src/SMAPI.Web/Framework/LogParsing')
-rw-r--r--src/SMAPI.Web/Framework/LogParsing/LogParser.cs10
-rw-r--r--src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs22
-rw-r--r--src/SMAPI.Web/Framework/LogParsing/Models/ModType.cs15
3 files changed, 29 insertions, 18 deletions
diff --git a/src/SMAPI.Web/Framework/LogParsing/LogParser.cs b/src/SMAPI.Web/Framework/LogParsing/LogParser.cs
index 4a110dcd..18ba754c 100644
--- a/src/SMAPI.Web/Framework/LogParsing/LogParser.cs
+++ b/src/SMAPI.Web/Framework/LogParsing/LogParser.cs
@@ -36,7 +36,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing
private readonly Regex ContentPackListStartPattern = new(@"^Loaded \d+ content packs:$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
/// <summary>A regex pattern matching an entry in SMAPI's content pack list.</summary>
- private readonly Regex ContentPackListEntryPattern = new(@"^ (?<name>.+?) (?<version>[^\s]+)(?: by (?<author>[^\|]+))? \| for (?<for>[^\|]+)(?: \| (?<description>.+))?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
+ private readonly Regex ContentPackListEntryPattern = new(@"^ (?<name>.+?) (?<version>[^\s]+)(?: by (?<author>[^\|]+))? \| for (?<for>[^\|]*)(?: \| (?<description>.+))?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
/// <summary>A regex pattern matching the start of SMAPI's mod update list.</summary>
private readonly Regex ModUpdateListStartPattern = new(@"^You can update \d+ mods?:$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
@@ -77,8 +77,8 @@ namespace StardewModdingAPI.Web.Framework.LogParsing
};
// parse log messages
- LogModInfo smapiMod = new(name: "SMAPI", author: "Pathoschild", version: "", description: "", loaded: true, isMod: false);
- LogModInfo gameMod = new(name: "game", author: "", version: "", description: "", loaded: true, isMod: false);
+ LogModInfo smapiMod = new(ModType.Special, name: "SMAPI", author: "Pathoschild", version: "", description: "", loaded: true);
+ LogModInfo gameMod = new(ModType.Special, name: "game", author: "", version: "", description: "", loaded: true);
IDictionary<string, List<LogModInfo>> mods = new Dictionary<string, List<LogModInfo>>();
bool inModList = false;
bool inContentPackList = false;
@@ -133,7 +133,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing
if (!mods.TryGetValue(name, out List<LogModInfo>? entries))
mods[name] = entries = new List<LogModInfo>();
- entries.Add(new LogModInfo(name: name, author: author, version: version, description: description, loaded: true));
+ entries.Add(new LogModInfo(ModType.CodeMod, name: name, author: author, version: version, description: description, loaded: true));
message.Section = LogSection.ModsList;
}
@@ -156,7 +156,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing
if (!mods.TryGetValue(name, out List<LogModInfo>? entries))
mods[name] = entries = new List<LogModInfo>();
- entries.Add(new LogModInfo(name: name, author: author, version: version, description: description, contentPackFor: forMod, loaded: true));
+ entries.Add(new LogModInfo(ModType.ContentPack, name: name, author: author, version: version, description: description, contentPackFor: forMod, loaded: true));
message.Section = LogSection.ContentPackList;
}
diff --git a/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs b/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
index 557f08ff..c81942e4 100644
--- a/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
+++ b/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
@@ -48,21 +48,24 @@ namespace StardewModdingAPI.Web.Framework.LogParsing.Models
[MemberNotNullWhen(true, nameof(LogModInfo.UpdateVersion), nameof(LogModInfo.UpdateLink))]
public bool HasUpdate => this.UpdateVersion != null && this.Version != this.UpdateVersion;
+ /// <summary>The mod type.</summary>
+ public ModType ModType { get; }
+
/// <summary>Whether this is an actual mod (rather than a special entry for SMAPI or the game itself).</summary>
- public bool IsMod { get; }
+ public bool IsMod => this.ModType != ModType.Special;
/// <summary>Whether this is a C# code mod.</summary>
- public bool IsCodeMod { get; }
+ public bool IsCodeMod => this.ModType == ModType.CodeMod;
/// <summary>Whether this is a content pack for another mod.</summary>
- [MemberNotNullWhen(true, nameof(LogModInfo.ContentPackFor))]
- public bool IsContentPack { get; }
+ public bool IsContentPack => this.ModType == ModType.ContentPack;
/*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
+ /// <param name="modType">The mod type.</param>
/// <param name="name">The mod name.</param>
/// <param name="author">The mod author.</param>
/// <param name="version">The mod version.</param>
@@ -72,9 +75,9 @@ namespace StardewModdingAPI.Web.Framework.LogParsing.Models
/// <param name="contentPackFor">The name of the mod for which this is a content pack (if applicable).</param>
/// <param name="errors">The number of errors logged by this mod.</param>
/// <param name="loaded">Whether the mod was loaded into the game.</param>
- /// <param name="isMod">Whether this is an actual mod (instead of a special entry for SMAPI or the game).</param>
- public LogModInfo(string name, string author, string version, string description, string? updateVersion = null, string? updateLink = null, string? contentPackFor = null, int errors = 0, bool loaded = true, bool isMod = true)
+ public LogModInfo(ModType modType, string name, string author, string version, string description, string? updateVersion = null, string? updateLink = null, string? contentPackFor = null, int errors = 0, bool loaded = true)
{
+ this.ModType = modType;
this.Name = name;
this.Author = author;
this.Description = description;
@@ -84,13 +87,6 @@ namespace StardewModdingAPI.Web.Framework.LogParsing.Models
this.Errors = errors;
this.Loaded = loaded;
- if (isMod)
- {
- this.IsMod = true;
- this.IsContentPack = !string.IsNullOrWhiteSpace(this.ContentPackFor);
- this.IsCodeMod = !this.IsContentPack;
- }
-
this.OverrideVersion(version);
}
diff --git a/src/SMAPI.Web/Framework/LogParsing/Models/ModType.cs b/src/SMAPI.Web/Framework/LogParsing/Models/ModType.cs
new file mode 100644
index 00000000..363aaaec
--- /dev/null
+++ b/src/SMAPI.Web/Framework/LogParsing/Models/ModType.cs
@@ -0,0 +1,15 @@
+namespace StardewModdingAPI.Web.Framework.LogParsing.Models
+{
+ /// <summary>The type for a <see cref="LogModInfo"/> instance.</summary>
+ public enum ModType
+ {
+ /// <summary>A special non-mod entry (e.g. for SMAPI or the game itself).</summary>
+ Special,
+
+ /// <summary>A C# mod.</summary>
+ CodeMod,
+
+ /// <summary>A content pack loaded by a C# mod.</summary>
+ ContentPack
+ }
+}