using System; using System.Diagnostics.CodeAnalysis; using StardewModdingAPI.Toolkit.Framework; namespace StardewModdingAPI.Toolkit.Utilities { /// Provides methods for fetching environment information. public static class EnvironmentUtility { /********* ** Fields *********/ /// The cached platform. private static Platform? CachedPlatform; /********* ** Public methods *********/ /// Detect the current OS. public static Platform DetectPlatform() { Platform? platform = EnvironmentUtility.CachedPlatform; if (platform == null) { string rawPlatform = LowLevelEnvironmentUtility.DetectPlatform(); EnvironmentUtility.CachedPlatform = platform = (Platform)Enum.Parse(typeof(Platform), rawPlatform, ignoreCase: true); } return platform.Value; } /// Get the human-readable OS name and version. /// The current platform. [SuppressMessage("ReSharper", "EmptyGeneralCatchClause", Justification = "Error suppressed deliberately to fallback to default behaviour.")] public static string GetFriendlyPlatformName(Platform platform) { return LowLevelEnvironmentUtility.GetFriendlyPlatformName(platform.ToString()); } /// Get the name of the Stardew Valley executable. /// The current platform. public static string GetExecutableName(Platform platform) { return LowLevelEnvironmentUtility.GetExecutableName(platform.ToString()); } /// Get whether the platform uses Mono. /// The current platform. public static bool IsMono(this Platform platform) { return LowLevelEnvironmentUtility.IsMono(platform.ToString()); } } }