summaryrefslogtreecommitdiff
path: root/src/SMAPI
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-04-22 21:52:09 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-04-22 21:52:09 -0400
commit665c6806d3797f8329ef8c6fcaa80d469fef5005 (patch)
tree1b0ea62fa2d94f2229c80e1c94516b7565ef27b7 /src/SMAPI
parent13a3c8fbddb9dd47d30e1b9684d3ceb048086e91 (diff)
downloadSMAPI-665c6806d3797f8329ef8c6fcaa80d469fef5005.tar.gz
SMAPI-665c6806d3797f8329ef8c6fcaa80d469fef5005.tar.bz2
SMAPI-665c6806d3797f8329ef8c6fcaa80d469fef5005.zip
add update alerts for Stardew64Installer (#767)
Diffstat (limited to 'src/SMAPI')
-rw-r--r--src/SMAPI/Constants.cs15
-rw-r--r--src/SMAPI/Framework/Logging/LogManager.cs9
-rw-r--r--src/SMAPI/Framework/Models/SConfig.cs3
-rw-r--r--src/SMAPI/Framework/SCore.cs35
-rw-r--r--src/SMAPI/SMAPI.config.json5
5 files changed, 60 insertions, 7 deletions
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index b55104c0..161e92b4 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -300,6 +300,21 @@ namespace StardewModdingAPI
return new PlatformAssemblyMap(targetPlatform, removeAssemblyReferences.ToArray(), targetAssemblies.ToArray());
}
+ /// <summary>Get whether the game assembly was patched by Stardew64Installer.</summary>
+ /// <param name="version">The version of Stardew64Installer which was applied to the game assembly, if any.</param>
+ internal static bool IsPatchedByStardew64Installer(out ISemanticVersion version)
+ {
+ PropertyInfo property = typeof(Game1).GetProperty("Stardew64InstallerVersion");
+ if (property == null)
+ {
+ version = null;
+ return false;
+ }
+
+ version = new SemanticVersion((string)property.GetValue(null));
+ return true;
+ }
+
/*********
** Private methods
diff --git a/src/SMAPI/Framework/Logging/LogManager.cs b/src/SMAPI/Framework/Logging/LogManager.cs
index 804acfb3..a4df3c18 100644
--- a/src/SMAPI/Framework/Logging/LogManager.cs
+++ b/src/SMAPI/Framework/Logging/LogManager.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
-using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
using StardewModdingAPI.Framework.Commands;
@@ -12,7 +11,6 @@ using StardewModdingAPI.Framework.ModLoading;
using StardewModdingAPI.Internal.ConsoleWriting;
using StardewModdingAPI.Toolkit.Framework.ModData;
using StardewModdingAPI.Toolkit.Utilities;
-using StardewValley;
namespace StardewModdingAPI.Framework.Logging
{
@@ -421,11 +419,8 @@ namespace StardewModdingAPI.Framework.Logging
yield return $"running {Constants.GameFramework}";
// patched by Stardew64Installer
- {
- PropertyInfo patcherProperty = typeof(Game1).GetProperty("Stardew64InstallerVersion");
- if (patcherProperty != null)
- yield return $"patched by Stardew64Installer {patcherProperty.GetValue(null)}";
- }
+ if (Constants.IsPatchedByStardew64Installer(out ISemanticVersion patchedByVersion))
+ yield return $"patched by Stardew64Installer {patchedByVersion}";
}
/// <summary>Write a summary of mod warnings to the console and log.</summary>
diff --git a/src/SMAPI/Framework/Models/SConfig.cs b/src/SMAPI/Framework/Models/SConfig.cs
index 4a80e34c..a71bafd9 100644
--- a/src/SMAPI/Framework/Models/SConfig.cs
+++ b/src/SMAPI/Framework/Models/SConfig.cs
@@ -52,6 +52,9 @@ namespace StardewModdingAPI.Framework.Models
/// <summary>SMAPI's GitHub project name, used to perform update checks.</summary>
public string GitHubProjectName { get; set; }
+ /// <summary>Stardew64Installer's GitHub project name, used to perform update checks.</summary>
+ public string Stardew64InstallerGitHubProjectName { get; set; }
+
/// <summary>The base URL for SMAPI's web API, used to perform update checks.</summary>
public string WebApiBaseUrl { get; set; }
diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs
index e8c8a8e5..85a2bb8f 100644
--- a/src/SMAPI/Framework/SCore.cs
+++ b/src/SMAPI/Framework/SCore.cs
@@ -1302,6 +1302,41 @@ namespace StardewModdingAPI.Framework
this.LogManager.WriteUpdateMarker(updateFound.ToString(), updateUrl);
}
+ // check Stardew64Installer version
+ if (Constants.IsPatchedByStardew64Installer(out ISemanticVersion patchedByVersion))
+ {
+ ISemanticVersion updateFound = null;
+ string updateUrl = null;
+ try
+ {
+ // fetch update check
+ ModEntryModel response = client.GetModInfo(new[] { new ModSearchEntryModel("Steviegt6.Stardew64Installer", patchedByVersion, new[] { $"GitHub:{this.Settings.Stardew64InstallerGitHubProjectName}" }) }, apiVersion: Constants.ApiVersion, gameVersion: Constants.GameVersion, platform: Constants.Platform).Single().Value;
+ updateFound = response.SuggestedUpdate?.Version;
+ updateUrl = response.SuggestedUpdate?.Url ?? Constants.HomePageUrl;
+
+ // log message
+ if (updateFound != null)
+ this.Monitor.Log($"You can update Stardew64Installer to {updateFound}: {updateUrl}", LogLevel.Alert);
+ else
+ this.Monitor.Log(" Stardew64Installer okay.");
+
+ // show errors
+ if (response.Errors.Any())
+ {
+ this.Monitor.Log("Couldn't check for a new version of Stardew64Installer. 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: {string.Join("\n", response.Errors)}");
+ }
+ }
+ catch (Exception ex)
+ {
+ this.Monitor.Log("Couldn't check for a new version of Stardew64Installer. This won't affect your game, but you won't be notified of new versions if this keeps happening.", LogLevel.Warn);
+ this.Monitor.Log(ex is WebException && ex.InnerException == null
+ ? $"Error: {ex.Message}"
+ : $"Error: {ex.GetLogSummary()}"
+ );
+ }
+ }
+
// check mod versions
if (mods.Any())
{
diff --git a/src/SMAPI/SMAPI.config.json b/src/SMAPI/SMAPI.config.json
index b8179207..7b5625d6 100644
--- a/src/SMAPI/SMAPI.config.json
+++ b/src/SMAPI/SMAPI.config.json
@@ -70,6 +70,11 @@ copy all the settings, or you may cause bugs due to overridden changes in future
"GitHubProjectName": "Pathoschild/SMAPI",
/**
+ * Stardew64Installer's GitHub project name, used to perform update checks.
+ */
+ "Stardew64InstallerGitHubProjectName": "Steviegt6/Stardew64Installer",
+
+ /**
* The base URL for SMAPI's web API, used to perform update checks.
* Note: the protocol will be changed to http:// on Linux/macOS due to OpenSSL issues with the
* game's bundled Mono.