summaryrefslogtreecommitdiff
path: root/src/SMAPI/Program.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-03-26 09:35:34 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-03-26 09:35:34 -0400
commit46141a7af21a921284bc82d49d888da864887d6e (patch)
treec71d17897377725f32653eacc65233f0b848f813 /src/SMAPI/Program.cs
parentafb3c49bbaab07f3148f70d54f5140cdd83f8c20 (diff)
parent4d68ef3514de7deb357a0042d1af7ccf241ab5ff (diff)
downloadSMAPI-46141a7af21a921284bc82d49d888da864887d6e.tar.gz
SMAPI-46141a7af21a921284bc82d49d888da864887d6e.tar.bz2
SMAPI-46141a7af21a921284bc82d49d888da864887d6e.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI/Program.cs')
-rw-r--r--src/SMAPI/Program.cs31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/SMAPI/Program.cs b/src/SMAPI/Program.cs
index 4bd40710..1b8cb2ba 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))
- this.Monitor.Log($"You can update SMAPI to {response.Version}: {response.Url}", LogLevel.Alert);
+ else if (this.IsValidUpdate(Constants.ApiVersion, new SemanticVersion(response.Version)))
+ this.Monitor.Log($"You can update SMAPI to {response.Version}: {Constants.HomePageUrl}", 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}: {Constants.HomePageUrl}", 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)
@@ -930,7 +953,7 @@ namespace StardewModdingAPI
{
helper.ObservableAssetEditors.CollectionChanged += (sender, e) =>
{
- if (e.NewItems.Count > 0)
+ if (e.NewItems?.Count > 0)
{
this.Monitor.Log("Invalidating cache entries for new asset editors...", LogLevel.Trace);
this.ContentCore.InvalidateCacheFor(e.NewItems.Cast<IAssetEditor>().ToArray(), new IAssetLoader[0]);
@@ -938,7 +961,7 @@ namespace StardewModdingAPI
};
helper.ObservableAssetLoaders.CollectionChanged += (sender, e) =>
{
- if (e.NewItems.Count > 0)
+ if (e.NewItems?.Count > 0)
{
this.Monitor.Log("Invalidating cache entries for new asset loaders...", LogLevel.Trace);
this.ContentCore.InvalidateCacheFor(new IAssetEditor[0], e.NewItems.Cast<IAssetLoader>().ToArray());