using System; using System.IO; using System.Threading.Tasks; using HanumanInstitute.MvvmDialogs; using Nitrox.Launcher.ViewModels; using NitroxModel.Helper; using NitroxModel.Logger; using NitroxModel.Platforms.OS.Shared; namespace Nitrox.Launcher.Models.Utils; internal static class GameInspect { /// /// Check to ensure the Subnautica is not in legacy. /// public static async Task IsOutdatedGameAndNotify(string gameInstallDir, IDialogService dialogService = null) { try { ArgumentException.ThrowIfNullOrWhiteSpace(gameInstallDir); string gameVersionFile = Path.Combine(gameInstallDir, GameInfo.Subnautica.DataFolder, "StreamingAssets", "SNUnmanagedData", "plastic_status.ignore"); if (int.TryParse(await File.ReadAllTextAsync(gameVersionFile), out int gameVersion) && gameVersion <= 68598) { if (dialogService != null) { await dialogService.ShowAsync(model => { model.Title = "Legacy Game Detected"; model.Description = $"Nitrox does not support the legacy version of {GameInfo.Subnautica.FullName}. Please update your game to the latest version to run {GameInfo.Subnautica.FullName} with Nitrox.{Environment.NewLine}{Environment.NewLine}Version file location:{Environment.NewLine}{gameVersionFile}"; model.ButtonOptions = ButtonOptions.Ok; }); } return true; } } catch (Exception ex) { Log.Error(ex, "Error while checking game version:"); LauncherNotifier.Debug(ex.Message); // On error: ignore and assume it's not outdated in case of unforeseen changes. We don't want to block users. return false; } return false; } /// /// Checks game is running and if it is, warns. Does nothing in development mode for debugging purposes. /// public static bool WarnIfGameProcessExists(GameInfo game) { if (!NitroxEnvironment.IsReleaseMode) { return false; } if (!ProcessEx.ProcessExists(game.Name)) { return false; } LauncherNotifier.Warning($"An instance of {game.FullName} is already running"); return true; } }