diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2018-04-25 20:41:52 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2018-04-25 20:41:52 -0400 |
commit | 230099692635a7ca53edfebf4ed9225b5b1d5779 (patch) | |
tree | 18fa5779bf02d6bf55a4a7cd7c594eec7da417fb | |
parent | 469e0b8972bf79e5f22e5be4c1dcb8501cc37de4 (diff) | |
download | SMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.tar.gz SMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.tar.bz2 SMAPI-230099692635a7ca53edfebf4ed9225b5b1d5779.zip |
simplify beta channel logic (#457)
-rw-r--r-- | docs/release-notes.md | 2 | ||||
-rw-r--r-- | src/SMAPI/Framework/Models/SConfig.cs | 3 | ||||
-rw-r--r-- | src/SMAPI/Program.cs | 29 | ||||
-rw-r--r-- | src/SMAPI/StardewModdingAPI.config.json | 6 |
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", |