public void LoadMods() { var knownMods = this.Config.KnownMods; GlobalLog.Default.PrintLine("Total known mods: " + knownMods.Count); foreach (var modInfo in knownMods) { var modIdentifier = ModUtils.GetReadableIdentifier(modInfo); if (modInfo.Active == false) { GlobalLog.Debug.PrintLine("Skipping (not active): " + modIdentifier); continue; } using (GlobalLog.Default.OpenScope("Loading: " + modIdentifier, "Finished loading: " + modIdentifier)) { var modContext = new ModContext(modInfo); this.LoadedMods.Add(modContext); } } }
private void RemoveMod(object sender, RoutedEventArgs e) { var modInfos = this.SelectedMods.Select(guid => this.Config.KnownMods.Find(x => x.Guid == guid)).ToArray(); if (modInfos.Length == 0) { return; } var nl = Environment.NewLine; var message = "This operation will delete following mods:" + nl; message += string.Join(nl, modInfos.Select(x => $" - {x.DisplayName}")); message += nl + nl + "Are you sure?"; var result = MessageBox.Show(message, "Delete mods", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { foreach (var mod in modInfos) { var modDirectory = ModUtils.GetModDirectory(mod); if (Directory.Exists(modDirectory)) { try { Directory.Delete(modDirectory, true); } catch { var caption = "Error while deleting mod"; var error = "PatchZone could not delete all data of the following mod:" + nl; error += $" - {ModUtils.GetReadableIdentifier(mod)}" + nl + nl; error += "This usually happens when the game is still running or mod assets are open in dev tools." + nl; error += "Please close the game and all dev tools before continuing."; result = MessageBox.Show(error, caption, MessageBoxButton.OKCancel); if (result == MessageBoxResult.Cancel) { return; } try { Directory.Delete(modDirectory, true); } catch (Exception ex) { error = "Repeated attempt to delete data of the following mod failed:" + nl; error += $" - {ModUtils.GetReadableIdentifier(mod)}" + nl + nl; error += "Please delete following directory to finish the cleanup process:" + nl; error += modDirectory + nl + nl; result = MessageBox.Show(error, caption, MessageBoxButton.OKCancel); if (result == MessageBoxResult.Cancel) { return; } } } } this.Config.KnownMods.Remove(mod); } NotifyConfigurationChanged(); } }