summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-07-06 22:26:09 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-07-06 22:26:09 -0400
commitd51ffe58f7b7450cd4c4a7ee3d8b4da1cf55e7e4 (patch)
treeec19cdd7567125e47cfd49c7c044fc09f09f6b2f /src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
parent8e9237bdd7ec179975c9be5e28c811b42007e707 (diff)
parentbcb9e25d8666d2c1384515063ffbf987c36b8b0e (diff)
downloadSMAPI-d51ffe58f7b7450cd4c4a7ee3d8b4da1cf55e7e4.tar.gz
SMAPI-d51ffe58f7b7450cd4c4a7ee3d8b4da1cf55e7e4.tar.bz2
SMAPI-d51ffe58f7b7450cd4c4a7ee3d8b4da1cf55e7e4.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs')
-rw-r--r--src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs52
1 files changed, 48 insertions, 4 deletions
diff --git a/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs b/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
index a6b9165c..557f08ff 100644
--- a/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
+++ b/src/SMAPI.Web/Framework/LogParsing/Models/LogModInfo.cs
@@ -1,4 +1,6 @@
+using System;
using System.Diagnostics.CodeAnalysis;
+using StardewModdingAPI.Toolkit;
namespace StardewModdingAPI.Web.Framework.LogParsing.Models
{
@@ -6,6 +8,13 @@ namespace StardewModdingAPI.Web.Framework.LogParsing.Models
public class LogModInfo
{
/*********
+ ** Private fields
+ *********/
+ /// <summary>The parsed mod version, if valid.</summary>
+ private Lazy<ISemanticVersion?> ParsedVersionImpl;
+
+
+ /*********
** Accessors
*********/
/// <summary>The mod name.</summary>
@@ -39,9 +48,15 @@ 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>Whether the mod is a content pack for another mod.</summary>
+ /// <summary>Whether this is an actual mod (rather than a special entry for SMAPI or the game itself).</summary>
+ public bool IsMod { get; }
+
+ /// <summary>Whether this is a C# code mod.</summary>
+ public bool IsCodeMod { get; }
+
+ /// <summary>Whether this is a content pack for another mod.</summary>
[MemberNotNullWhen(true, nameof(LogModInfo.ContentPackFor))]
- public bool IsContentPack => !string.IsNullOrWhiteSpace(this.ContentPackFor);
+ public bool IsContentPack { get; }
/*********
@@ -57,17 +72,26 @@ 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>
- 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)
+ /// <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)
{
this.Name = name;
this.Author = author;
- this.Version = version;
this.Description = description;
this.UpdateVersion = updateVersion;
this.UpdateLink = updateLink;
this.ContentPackFor = contentPackFor;
this.Errors = errors;
this.Loaded = loaded;
+
+ if (isMod)
+ {
+ this.IsMod = true;
+ this.IsContentPack = !string.IsNullOrWhiteSpace(this.ContentPackFor);
+ this.IsCodeMod = !this.IsContentPack;
+ }
+
+ this.OverrideVersion(version);
}
/// <summary>Add an update alert for this mod.</summary>
@@ -81,9 +105,29 @@ namespace StardewModdingAPI.Web.Framework.LogParsing.Models
/// <summary>Override the version number, for cases like SMAPI itself where the version is only known later during parsing.</summary>
/// <param name="version">The new mod version.</param>
+ [MemberNotNull(nameof(LogModInfo.Version), nameof(LogModInfo.ParsedVersionImpl))]
public void OverrideVersion(string version)
{
this.Version = version;
+ this.ParsedVersionImpl = new Lazy<ISemanticVersion?>(this.ParseVersion);
+ }
+
+ /// <summary>Get the semantic version for this mod, if it's valid.</summary>
+ public ISemanticVersion? GetParsedVersion()
+ {
+ return this.ParsedVersionImpl.Value;
+ }
+
+
+ /*********
+ ** Private methods
+ *********/
+ /// <summary>Get the semantic version for this mod, if it's valid.</summary>
+ public ISemanticVersion? ParseVersion()
+ {
+ return !string.IsNullOrWhiteSpace(this.Version) && SemanticVersion.TryParse(this.Version, out ISemanticVersion? version)
+ ? version
+ : null;
}
}
}