From 8da74ffa6dd945773a4587b1a126acb5acddb26e Mon Sep 17 00:00:00 2001 From: strongleong Date: Tue, 15 Feb 2022 22:51:37 +1100 Subject: [PATCH] Refactored methods that do filesystem stuff from `ScrapMod` to `ModsLauncher` --- ScrapModLoader/ModsLauncher.cs | 86 ++++++++++++++++++++++++++++++---- ScrapModLoader/ScrapMod.cs | 61 ------------------------ 2 files changed, 78 insertions(+), 69 deletions(-) diff --git a/ScrapModLoader/ModsLauncher.cs b/ScrapModLoader/ModsLauncher.cs index e4d6181..e966c78 100644 --- a/ScrapModLoader/ModsLauncher.cs +++ b/ScrapModLoader/ModsLauncher.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; +using Ionic.Zip; + using Microsoft.Win32; namespace ScrapModLoader @@ -9,18 +12,22 @@ namespace ScrapModLoader public class ModsLauncher { public List Mods { get; private set; } + public List ModsPathes { get; set; } public String ScraplandPath { get; set; } public String ScraplandRemasteredPath { get; set; } public String SelectedGameVersion { get; set; } public String LauncherVersion { get; set; } + public String SelectedGamePath { get; set; } public ModsLauncher() { Mods = new List(); + ModsPathes = Utils.StringCollectionToList(Settings.Default.ModsPathes); ScraplandPath = Settings.Default.ScraplandPath; ScraplandRemasteredPath = Settings.Default.ScraplandRemasteredPath; SelectedGameVersion = "0.0"; LauncherVersion = "0.3"; + SelectedGamePath = String.Empty; } public void ScanMods() @@ -63,9 +70,12 @@ namespace ScrapModLoader if (displayName == null) continue; - if (displayName == "Scrapland") + if (displayName == "Scrapland" || displayName == "American McGee presents Scrapland") { ScraplandPath = subkey.GetValue("InstallLocation")?.ToString() ?? ""; + if (ScraplandPath == null || ScraplandPath == String.Empty) + throw new KeyNotFoundException("Installed Scrapland found, but unable to locate the instalation folder"); + Settings.Default.ScraplandPath = ScraplandPath; isFound = true; } @@ -73,6 +83,9 @@ namespace ScrapModLoader if (displayName == "Scrapland Remastered") { ScraplandRemasteredPath = subkey.GetValue("InstallLocation")?.ToString() ?? ""; + if (ScraplandRemasteredPath == null || ScraplandRemasteredPath == String.Empty) + throw new KeyNotFoundException("Installed Scrapland Remastered found, but unable to locate the instalation folder"); + Settings.Default.ScraplandRemasteredPath = ScraplandRemasteredPath; isFound = true; } @@ -84,21 +97,78 @@ namespace ScrapModLoader public void LoadMods() { - String gamePath = SelectedGameVersion == "1.0" ? ScraplandPath : ScraplandRemasteredPath; + SelectedGamePath = SelectedGameVersion == "1.0" ? ScraplandPath : ScraplandRemasteredPath; foreach (ScrapMod mod in Mods) { // TODO: Warning about not loading mods that not supports selected version if (!mod.SupportedGameVersions.Contains(SelectedGameVersion) || - Single.Parse(mod.RequiredLauncher) < Single.Parse(LauncherVersion)) + Single.Parse(mod.RequiredLauncher, CultureInfo.InvariantCulture) < Single.Parse(LauncherVersion, CultureInfo.InvariantCulture)) continue; if (mod.Checked) - if (!mod.IsEnabled(gamePath)) - mod.Enable(gamePath, SelectedGameVersion); - else - if (mod.IsEnabled(gamePath)) - mod.Disable(gamePath); + { + if (!IsEnabled(mod)) + Enable(mod); + } + else + { + if (IsEnabled(mod)) + Disable(mod); + } + } + } + + public Boolean IsLoaded(ScrapMod mod) => + Directory.Exists(SelectedGamePath + @"Mods\" + mod.Name); + + public Boolean IsEnabled(ScrapMod mod) + { + if (!IsLoaded(mod)) + return false; + + foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.disabled", SearchOption.AllDirectories)) + return false; + + return true; + } + + public void Enable(ScrapMod mod) + { + if (!IsLoaded(mod)) + LoadModToGame(mod); + + if (IsEnabled(mod)) + return; + + foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.disabled", SearchOption.AllDirectories)) + File.Move(file, Path.ChangeExtension(file, null)); + } + + public void Disable(ScrapMod mod) + { + if (!IsEnabled(mod)) + return; + + foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.packed", SearchOption.AllDirectories)) + File.Move(file, file + ".disabled"); + } + + private void LoadModToGame(ScrapMod mod) + { + String modPath = SelectedGamePath + @"Mods\" + mod.Name; + Directory.CreateDirectory(modPath); + + using (ZipFile zipFile = ZipFile.Read(mod.ModPath)) + { + foreach (ZipEntry zipEntry in zipFile) + { + if (!Path.GetFullPath(zipEntry.FileName).Contains(SelectedGameVersion)) + continue; + + if (Path.GetExtension(zipEntry.FileName) == ".packed") + zipEntry.Extract(modPath); + } } } } diff --git a/ScrapModLoader/ScrapMod.cs b/ScrapModLoader/ScrapMod.cs index 711d8cd..c38ff10 100644 --- a/ScrapModLoader/ScrapMod.cs +++ b/ScrapModLoader/ScrapMod.cs @@ -40,65 +40,6 @@ namespace ScrapModLoader } - - public Boolean IsLoaded(String gamePath) => Directory.Exists(gamePath + @"Mods\" + Name); - - public Boolean IsEnabled(String gamePath) - { - if (IsLoaded(gamePath)) - { - foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name)) - { - if (Path.GetExtension(file) == ".disabled") - return false; - } - - return true; - } - return false; - } - - public void Enable(String gamePath, String gameVersion) - { - if (!IsLoaded(gamePath)) - LoadModToGame(gamePath, gameVersion); - - if (IsEnabled(gamePath)) - return; - - foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name)) - if (Path.GetExtension(file) == ".disabled") - File.Move(file, Path.ChangeExtension(file, null)); - } - - public void Disable(String gamePath) - { - if (!IsEnabled(gamePath)) - return; - - foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name)) - if (Path.GetExtension(file) == ".packed") - File.Move(file, file + ".disabled"); - } - - private void LoadModToGame(String gamePath, String gameVersion) - { - gamePath += @"Mods\" + Name; - Directory.CreateDirectory(gamePath); - - using (ZipFile zipFile = ZipFile.Read(ModPath)) - { - foreach (ZipEntry zipEntry in zipFile) - { - if (!Path.GetFullPath(zipEntry.FileName).Contains(gameVersion)) - continue; - - if (Path.GetExtension(zipEntry.FileName) == ".packed") - zipEntry.Extract(gamePath); - } - } - } - public static ScrapMod LoadFromFile(String path) { using ZipFile zipFile = ZipFile.Read(path); @@ -117,8 +58,6 @@ namespace ScrapModLoader return mod; } - - private static void LoadConfig(ScrapMod mod, Byte[] buffer) { using MemoryStream sourceStream = new MemoryStream(buffer);