From f26d4c20eade763c277d1a5770bda87510daa8d3 Mon Sep 17 00:00:00 2001 From: blowfish Date: Sun, 21 Apr 2019 18:57:36 -0700 Subject: [PATCH] Verify install and warn user of issues * Warn if Restock is installed in the wrong place (finds DLL and then goes two directories up, this should be Restock's "root" install directory) * Warn if some old directories are sitting around from an old version of KSP, since the old part configs break stuff. --- .../GameData/ReStock/Plugins/Restock.dll | Bin 18432 -> 24064 bytes Source/Restock/InstallChecker.cs | 101 ++++++++++++++++++ Source/Restock/Restock.csproj | 1 + 3 files changed, 102 insertions(+) create mode 100644 Source/Restock/InstallChecker.cs diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 24baa458e0d8cde26f9a761bebe7a8ea1b47e1ab..ffbba4cfc0489c8ce0c8999d48372d906e3b17cc 100644 GIT binary patch literal 24064 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 literal 18432 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 UNEXPECTED_URLS = Array.AsReadOnly(new[] { + "Squad/Parts/FuelTank/fuelTankT100", + "Squad/Parts/FuelTank/fuelTankT200", + "Squad/Parts/FuelTank/fuelTankT400", + "Squad/Parts/FuelTank/fuelTankT800", + }); + + private void Start() + { + string[] errorMessages = CheckInstallLocation().Concat(CheckUnexpectedUrls()).ToArray(); + + if (errorMessages.Length > 0) CreateWarningDialog(errorMessages); + } + + private IEnumerable CheckInstallLocation() + { + UrlDir gameData = GameDatabase.Instance.root.children.First(dir => dir.type == UrlDir.DirectoryType.GameData); + AssemblyLoader.LoadedAssembly loadedAssembly = AssemblyLoader.loadedAssemblies.GetByAssembly(Assembly.GetExecutingAssembly()); + + if (loadedAssembly == null) + { + Debug.LogError("[Restock] Error checking install location - could not find loaded assembly"); + yield break; + } + + UrlDir assemblyDir = GetDirectory(gameData, loadedAssembly.url); + + if (assemblyDir == null) + { + Debug.LogError("[Restock] Error checking install location - could not find assembly url directory: " + loadedAssembly.url); + yield break; + } + + string observedInstallPath = Path.GetFullPath(assemblyDir.parent.path); + string expectedInstallPath = Path.GetFullPath(Path.Combine(KSPUtil.ApplicationRootPath, Path.Combine("GameData", "ReStock"))); + + if (observedInstallPath != expectedInstallPath) + { + Debug.LogError($"[Restock] Install found at '{observedInstallPath}'"); + yield return $"Expected Restock to be installed at\n{expectedInstallPath}\nbut actually installed at\n{observedInstallPath}"; + } + } + + private IEnumerable CheckUnexpectedUrls() + { + UrlDir gameData = GameDatabase.Instance.root.children.First(dir => dir.type == UrlDir.DirectoryType.GameData); + foreach (string unexpectedUrl in UNEXPECTED_URLS) + { + if (!(gameData.GetDirectory(unexpectedUrl) is UrlDir unexpectedDir)) continue; + Debug.LogError("[ReStock] Found unexpected directory " + unexpectedDir.path); + yield return $"Found unexpected directory, likely left over from an older version of KSP:\n" + unexpectedDir.path; + } + } + + private void CreateWarningDialog(params string[] allMessages) + { + PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), + new Vector2(0.5f, 0.5f), + new MultiOptionDialog( + "RestockInstallWarning", + $"Restock has detected installation issues:\n\n{string.Join("\n\n", allMessages)}", + "Restock - installation issues detected", + HighLogic.UISkin, + new Rect(0.5f, 0.5f, 500f, 60f), + new DialogGUIFlexibleSpace(), + new DialogGUIHorizontalLayout( + new DialogGUIFlexibleSpace(), + new DialogGUIButton("OK", delegate () { }, 140.0f, 30.0f, true), + new DialogGUIFlexibleSpace() + ) + ), + true, + HighLogic.UISkin); + } + + private UrlDir GetDirectory(UrlDir baseUrl, string url) + { + string[] splitUrl = url.Trim().Split('/'); + + UrlDir currentDir = baseUrl; + foreach (string dirName in splitUrl) + { + currentDir = currentDir.children.FirstOrDefault(dir => dir.name == dirName); + if (currentDir == null) return null; + } + return currentDir; + } + } +} diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index 9989e844..69ebd600 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -41,6 +41,7 @@ +