summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-04-25 20:41:52 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-04-25 20:41:52 -0400
commit230099692635a7ca53edfebf4ed9225b5b1d5779 (patch)
tree18fa5779bf02d6bf55a4a7cd7c594eec7da417fb
parent469e0b8972bf79e5f22e5be4c1dcb8501cc37de4 (diff)
downloadSMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.tar.gz
SMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.tar.bz2
SMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.zip
simplify beta channel logic (#457)
-rw-r--r--docs/release-notes.md2
-rw-r--r--src/SMAPI/Framework/Models/SConfig.cs3
-rw-r--r--src/SMAPI/Program.cs29
-rw-r--r--src/SMAPI/StardewModdingAPI.config.json6
4 files changed, 21 insertions, 19 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 86475d6e..5e14f34d 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -4,8 +4,8 @@
* Added support for Stardew Valley 1.3+; no longer compatible with earlier versions.
* Added warning for mods which don't have update checks configured.
* Added friendly error when game can't start audio.
+ * Added beta update channel.
* Fixed detection of GOG install path in rare cases.
- * Fixed SMAPI update checks not showing newer beta versions when using a beta version.
* Fixed console color scheme on Mac or PowerShell, and added override option to `StardewModdingAPI.config.json`.
* Fixed `world_settime` console command sometimes breaking NPC schedules (e.g. so they stay in bed).
diff --git a/src/SMAPI/Framework/Models/SConfig.cs b/src/SMAPI/Framework/Models/SConfig.cs
index b504f38b..be84a6b9 100644
--- a/src/SMAPI/Framework/Models/SConfig.cs
+++ b/src/SMAPI/Framework/Models/SConfig.cs
@@ -12,6 +12,9 @@ namespace StardewModdingAPI.Framework.Models
/// <summary>Whether to check for newer versions of SMAPI and mods on startup.</summary>
public bool CheckForUpdates { get; set; }
+ /// <summary>Whether to show beta versions as valid updates.</summary>
+ public bool UseBetaChannel { get; set; } = Constants.ApiVersion.Build != null;
+
/// <summary>SMAPI's GitHub project name, used to perform update checks.</summary>
public string GitHubProjectName { get; set; }
diff --git a/src/SMAPI/Program.cs b/src/SMAPI/Program.cs
index eda85866..4075dae4 100644
--- a/src/SMAPI/Program.cs
+++ b/src/SMAPI/Program.cs
@@ -550,15 +550,18 @@ namespace StardewModdingAPI
try
{
ModInfoModel response = client.GetModInfo($"GitHub:{this.Settings.GitHubProjectName}").Single().Value;
+ ISemanticVersion latestStable = response.Version != null ? new SemanticVersion(response.Version) : null;
+ ISemanticVersion latestBeta = response.PreviewVersion != null ? new SemanticVersion(response.PreviewVersion) : null;
+
if (response.Error != null)
{
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 (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 if (this.IsValidUpdate(Constants.ApiVersion, latestBeta, this.Settings.UseBetaChannel))
+ this.Monitor.Log($"You can update SMAPI to {latestBeta}: {Constants.HomePageUrl}", LogLevel.Alert);
+ else if (this.IsValidUpdate(Constants.ApiVersion, latestStable, this.Settings.UseBetaChannel))
+ this.Monitor.Log($"You can update SMAPI to {latestStable}: {Constants.HomePageUrl}", LogLevel.Alert);
else
this.Monitor.Log(" SMAPI okay.", LogLevel.Trace);
}
@@ -658,22 +661,12 @@ namespace StardewModdingAPI
/// <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)
+ /// <param name="useBetaChannel">Whether the user enabled the beta channel and should be offered pre-release updates.</param>
+ private bool IsValidUpdate(ISemanticVersion currentVersion, ISemanticVersion newVersion, bool useBetaChannel)
{
- // 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;
+ newVersion.IsNewerThan(currentVersion)
+ && (useBetaChannel || newVersion.Build == null);
}
/// <summary>Create a directory path if it doesn't exist.</summary>
diff --git a/src/SMAPI/StardewModdingAPI.config.json b/src/SMAPI/StardewModdingAPI.config.json
index 06c63e8b..f37c6fc1 100644
--- a/src/SMAPI/StardewModdingAPI.config.json
+++ b/src/SMAPI/StardewModdingAPI.config.json
@@ -22,6 +22,12 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha
"CheckForUpdates": true,
/**
+ * Whether SMAPI should show newer beta versions as an available update. If not specified, SMAPI
+ * will only show beta updates if the current version is beta.
+ */
+ //"UseBetaChannel": true,
+
+ /**
* SMAPI's GitHub project name, used to perform update checks.
*/
"GitHubProjectName": "Pathoschild/SMAPI",