summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SMAPI/Program.cs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/SMAPI/Program.cs b/src/SMAPI/Program.cs
index 4bd40710..e4b279f7 100644
--- a/src/SMAPI/Program.cs
+++ b/src/SMAPI/Program.cs
@@ -541,8 +541,10 @@ namespace StardewModdingAPI
this.Monitor.Log("Couldn't check for a new version of SMAPI. This won't affect your game, but you may not be notified of new versions if this keeps happening.", LogLevel.Warn);
this.Monitor.Log($"Error: {response.Error}");
}
- else if (new SemanticVersion(response.Version).IsNewerThan(Constants.ApiVersion))
+ else if (this.IsValidUpdate(Constants.ApiVersion, new SemanticVersion(response.Version)))
this.Monitor.Log($"You can update SMAPI to {response.Version}: {response.Url}", LogLevel.Alert);
+ else if (response.PreviewVersion != null && this.IsValidUpdate(Constants.ApiVersion, new SemanticVersion(response.PreviewVersion)))
+ this.Monitor.Log($"You can update SMAPI to {response.PreviewVersion}: {response.Url}", LogLevel.Alert);
else
this.Monitor.Log(" SMAPI okay.", LogLevel.Trace);
}
@@ -656,6 +658,27 @@ namespace StardewModdingAPI
}).Start();
}
+ /// <summary>Get whether a given version should be offered to the user as an update.</summary>
+ /// <param name="currentVersion">The current semantic version.</param>
+ /// <param name="newVersion">The target semantic version.</param>
+ private bool IsValidUpdate(ISemanticVersion currentVersion, ISemanticVersion newVersion)
+ {
+ // basic eligibility
+ bool isNewer = newVersion.IsNewerThan(currentVersion);
+ bool isPrerelease = newVersion.Build != null;
+ bool isEquallyStable = !isPrerelease || currentVersion.Build != null; // don't update stable => prerelease
+ if (!isNewer || !isEquallyStable)
+ return false;
+ if (!isPrerelease)
+ return true;
+
+ // prerelease eligible if same version (excluding prerelease tag)
+ return
+ newVersion.MajorVersion == currentVersion.MajorVersion
+ && newVersion.MinorVersion == currentVersion.MinorVersion
+ && newVersion.PatchVersion == currentVersion.PatchVersion;
+ }
+
/// <summary>Create a directory path if it doesn't exist.</summary>
/// <param name="path">The directory path.</param>
private void VerifyPath(string path)