summaryrefslogtreecommitdiff
path: root/src/SMAPI.Toolkit
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-11-30 17:14:03 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-11-30 17:14:03 -0500
commit3342502993c39efec6734c68e4800d29073eeeec (patch)
treea96f1b62b3aeba3d5b12ad7496de06a94d39c977 /src/SMAPI.Toolkit
parentd578345cfd53df8a91ae8e0e1346b711332a999a (diff)
parentb294ac1203aa78575f8c72f0be1ee9d3edff15ab (diff)
downloadSMAPI-3342502993c39efec6734c68e4800d29073eeeec.tar.gz
SMAPI-3342502993c39efec6734c68e4800d29073eeeec.tar.bz2
SMAPI-3342502993c39efec6734c68e4800d29073eeeec.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Toolkit')
-rw-r--r--src/SMAPI.Toolkit/Framework/Constants.cs9
-rw-r--r--src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs5
-rw-r--r--src/SMAPI.Toolkit/Framework/LowLevelEnvironmentUtility.cs9
-rw-r--r--src/SMAPI.Toolkit/SMAPI.Toolkit.csproj6
-rw-r--r--src/SMAPI.Toolkit/Utilities/EnvironmentUtility.cs7
-rw-r--r--src/SMAPI.Toolkit/Utilities/FileUtilities.cs13
-rw-r--r--src/SMAPI.Toolkit/Utilities/PathUtilities.cs45
7 files changed, 37 insertions, 57 deletions
diff --git a/src/SMAPI.Toolkit/Framework/Constants.cs b/src/SMAPI.Toolkit/Framework/Constants.cs
new file mode 100644
index 00000000..55f26582
--- /dev/null
+++ b/src/SMAPI.Toolkit/Framework/Constants.cs
@@ -0,0 +1,9 @@
+namespace StardewModdingAPI.Toolkit.Framework
+{
+ /// <summary>Contains the SMAPI installer's constants and assumptions.</summary>
+ internal static class Constants
+ {
+ /// <summary>The name of the game's main DLL, used to detect game folders.</summary>
+ public const string GameDllName = "Stardew Valley.dll";
+ }
+}
diff --git a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
index c90fc1d3..7553c07f 100644
--- a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
+++ b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
@@ -56,10 +56,7 @@ namespace StardewModdingAPI.Toolkit.Framework.GameScanning
{
return
dir.Exists
- && (
- dir.EnumerateFiles("StardewValley.exe").Any()
- || dir.EnumerateFiles("Stardew Valley.exe").Any()
- );
+ && dir.EnumerateFiles("Stardew Valley.dll").Any();
}
diff --git a/src/SMAPI.Toolkit/Framework/LowLevelEnvironmentUtility.cs b/src/SMAPI.Toolkit/Framework/LowLevelEnvironmentUtility.cs
index 2636aae0..8b6eb5fb 100644
--- a/src/SMAPI.Toolkit/Framework/LowLevelEnvironmentUtility.cs
+++ b/src/SMAPI.Toolkit/Framework/LowLevelEnvironmentUtility.cs
@@ -80,15 +80,6 @@ namespace StardewModdingAPI.Toolkit.Framework
return name;
}
- /// <summary>Get the name of the Stardew Valley executable.</summary>
- /// <param name="platform">The current platform.</param>
- public static string GetExecutableName(string platform)
- {
- return platform == nameof(Platform.Windows)
- ? "Stardew Valley.exe"
- : "StardewValley.exe";
- }
-
/// <summary>Get whether an executable is 64-bit.</summary>
/// <param name="path">The absolute path to the assembly file.</param>
public static bool Is64BitAssembly(string path)
diff --git a/src/SMAPI.Toolkit/SMAPI.Toolkit.csproj b/src/SMAPI.Toolkit/SMAPI.Toolkit.csproj
index 3d87c169..ec27bf79 100644
--- a/src/SMAPI.Toolkit/SMAPI.Toolkit.csproj
+++ b/src/SMAPI.Toolkit/SMAPI.Toolkit.csproj
@@ -2,7 +2,7 @@
<PropertyGroup>
<RootNamespace>StardewModdingAPI.Toolkit</RootNamespace>
<Description>A library which encapsulates mod-handling logic for mod managers and tools. Not intended for use by mods.</Description>
- <TargetFrameworks>net452;netstandard2.0</TargetFrameworks>
+ <TargetFrameworks>net5.0; netstandard2.0</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
@@ -12,8 +12,8 @@
<PackageReference Include="HtmlAgilityPack" Version="1.11.33" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="Pathoschild.Http.FluentClient" Version="4.1.0" />
- <PackageReference Include="System.Management" Version="4.5.0" Condition="'$(OS)' == 'Windows_NT'" />
- <PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" Condition="'$(OS)' == 'Windows_NT' AND '$(TargetFramework)' == 'netstandard2.0'" />
+ <PackageReference Include="System.Management" Version="5.0.0" Condition="'$(OS)' == 'Windows_NT'" />
+ <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" Condition="'$(OS)' == 'Windows_NT'" />
</ItemGroup>
<ItemGroup>
diff --git a/src/SMAPI.Toolkit/Utilities/EnvironmentUtility.cs b/src/SMAPI.Toolkit/Utilities/EnvironmentUtility.cs
index 6de79a85..7536337a 100644
--- a/src/SMAPI.Toolkit/Utilities/EnvironmentUtility.cs
+++ b/src/SMAPI.Toolkit/Utilities/EnvironmentUtility.cs
@@ -40,13 +40,6 @@ namespace StardewModdingAPI.Toolkit.Utilities
return LowLevelEnvironmentUtility.GetFriendlyPlatformName(platform.ToString());
}
- /// <summary>Get the name of the Stardew Valley executable.</summary>
- /// <param name="platform">The current platform.</param>
- public static string GetExecutableName(Platform platform)
- {
- return LowLevelEnvironmentUtility.GetExecutableName(platform.ToString());
- }
-
/// <summary>Get whether an executable is 64-bit.</summary>
/// <param name="path">The absolute path to the assembly file.</param>
public static bool Is64BitAssembly(string path)
diff --git a/src/SMAPI.Toolkit/Utilities/FileUtilities.cs b/src/SMAPI.Toolkit/Utilities/FileUtilities.cs
index 7856fdb1..a6bf5929 100644
--- a/src/SMAPI.Toolkit/Utilities/FileUtilities.cs
+++ b/src/SMAPI.Toolkit/Utilities/FileUtilities.cs
@@ -1,4 +1,6 @@
+using System;
using System.IO;
+using System.Security.Cryptography;
using System.Threading;
namespace StardewModdingAPI.Toolkit.Utilities
@@ -42,5 +44,16 @@ namespace StardewModdingAPI.Toolkit.Utilities
if (entry.Exists)
throw new IOException($"Timed out trying to delete {entry.FullName}");
}
+
+ /// <summary>Get the MD5 hash for a file.</summary>
+ /// <param name="absolutePath">The absolute file path.</param>
+ public static string GetFileHash(string absolutePath)
+ {
+ using FileStream stream = File.OpenRead(absolutePath);
+ using MD5 md5 = MD5.Create();
+
+ byte[] hash = md5.ComputeHash(stream);
+ return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
+ }
}
}
diff --git a/src/SMAPI.Toolkit/Utilities/PathUtilities.cs b/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
index 020ebc6d..2e9e5eac 100644
--- a/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
+++ b/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.IO;
using System.Linq;
@@ -27,7 +26,7 @@ namespace StardewModdingAPI.Toolkit.Utilities
public static readonly char PreferredPathSeparator = Path.DirectorySeparatorChar;
/// <summary>The preferred directory separator character in an asset key.</summary>
- public static readonly char PreferredAssetSeparator = PathUtilities.PreferredPathSeparator;
+ public static readonly char PreferredAssetSeparator = '/';
/*********
@@ -88,14 +87,18 @@ namespace StardewModdingAPI.Toolkit.Utilities
/// <summary>Get a directory or file path relative to a given source path. If no relative path is possible (e.g. the paths are on different drives), an absolute path is returned.</summary>
/// <param name="sourceDir">The source folder path.</param>
/// <param name="targetPath">The target folder or file path.</param>
- /// <remarks>
- ///
- /// NOTE: this is a heuristic implementation that works in the cases SMAPI needs it for, but it doesn't handle all edge cases (e.g. case-sensitivity on Linux, or traversing between UNC paths on Windows). This should be replaced with the more comprehensive <c>Path.GetRelativePath</c> if the game ever migrates to .NET Core.
- ///
- /// </remarks>
[Pure]
public static string GetRelativePath(string sourceDir, string targetPath)
{
+#if NET5_0
+ return Path.GetRelativePath(sourceDir, targetPath);
+#else
+ // NOTE:
+ // this is a heuristic implementation that works in the cases SMAPI needs it for, but it
+ // doesn't handle all edge cases (e.g. case-sensitivity on Linux, or traversing between
+ // UNC paths on Windows). SMAPI and mods will use the more robust .NET 5 version anyway
+ // though, this is only for compatibility with the mod build package.
+
// convert to URIs
Uri from = new Uri(sourceDir.TrimEnd(PathUtilities.PossiblePathSeparators) + "/");
Uri to = new Uri(targetPath.TrimEnd(PathUtilities.PossiblePathSeparators) + "/");
@@ -123,6 +126,7 @@ namespace StardewModdingAPI.Toolkit.Utilities
}
return relative;
+#endif
}
/// <summary>Get whether a path is relative and doesn't try to climb out of its containing folder (e.g. doesn't contain <c>../</c>).</summary>
@@ -145,32 +149,5 @@ namespace StardewModdingAPI.Toolkit.Utilities
{
return !Regex.IsMatch(str, "[^a-z0-9_.-]", RegexOptions.IgnoreCase);
}
-
- /// <summary>Get the paths which exceed the OS length limit.</summary>
- /// <param name="rootPath">The root path to search.</param>
- internal static IEnumerable<string> GetTooLongPaths(string rootPath)
- {
- if (!Directory.Exists(rootPath))
- return new string[0];
-
- return Directory
- .EnumerateFileSystemEntries(rootPath, "*.*", SearchOption.AllDirectories)
- .Where(PathUtilities.IsPathTooLong);
- }
-
- /// <summary>Get whether a file or directory path exceeds the OS path length limit.</summary>
- /// <param name="path">The path to test.</param>
- internal static bool IsPathTooLong(string path)
- {
- try
- {
- _ = Path.GetFullPath(path);
- return false;
- }
- catch (PathTooLongException)
- {
- return true;
- }
- }
}
}