public static void RestoreAllBaksBtn_Click(object sender, EventArgs e) { EnsureBackupFolderExists(); List <string> bakList = new List <string>(); foreach (KeyValuePair <string, string> b in _baks) { bakList.Add(b.Key); } Dictionary <string, List <string> > x = checkForPartialRestores(bakList); if (x["partials"].Any()) { DialogResult ans = Utility.ShowMsg("Restoring the selected backups will partially unpatch at least one modpack. All files within a modpack " + "are intended to be patched and unpatched together. This may cause issues with your game.\r\nContinue?", "Question"); if (ans == DialogResult.No) { return; } } int r = RestoreBaks(bakList); MyMods.setModpacksDisabled(x["disable"]); MyMods.setModpacksPartial(x["partials"]); if (r == 0) { Utility.ShowMsg("Files have been restored.", "Info"); } else if (r == 1 || r == 2) { Utility.ShowMsg("At least one file restore failed. Your game may be in an unstable state.", "Warning"); } }
public static void RestoreSelectedBtn_Click(object sender, EventArgs e) { IEnumerable <Panel> bakList = Program.MasterForm.bakListPanel.Controls.OfType <Panel>(); List <string> backupPaths = new List <string>(); foreach (Panel p in bakList) { CheckBox chb = (CheckBox)p.GetChildAtPoint(Config.BackupsChbPoint); if (chb.Checked) { if (Program.MasterForm.fullBakPath_chb.Checked) { backupPaths.Add(chb.Text.Replace(Config.dirtyPadding, "")); } else { backupPaths.Add(GetBakKey(chb.Text.Replace(Config.dirtyPadding, ""))); } chb.Checked = false; } } if (!backupPaths.Any()) { Utility.ShowMsg("No items selected from the list.", "Error"); return; } Dictionary <string, List <string> > x = checkForPartialRestores(backupPaths); if (x["partials"].Any()) { DialogResult ans = Utility.ShowMsg("Restoring the selected backups will partially unpatch at least one modpack. All files within a modpack " + "are intended to be patched and unpatched together. This may cause issues with your game.\r\nContinue?", "Question"); if (ans == DialogResult.No) { return; } } int r = RestoreBaks(backupPaths); MyMods.setModpacksDisabled(x["disable"]); MyMods.setModpacksPartial(x["partials"]); if (r == 0) { Utility.ShowMsg("Selected files have been restored.", "Info"); } else if (r == 1 || r == 2) { Utility.ShowMsg("At least one file restore failed. Your game may be in an unstable state.", "Warning"); } }
public static void DoResetApp() { Patched = new Dictionary <string, patchedEntry>(); MCC_version = GetCurrentBuild(); SaveCfg(); MyMods.LoadModpacks(); if (!Backups.DeleteAll(true)) { Utility.ShowMsg("There was an issue deleting at least one backup. Please delete these in the Backups tab to avoid restoring an old " + "version of the file in the future.", "Error"); } Backups.LoadBackups(); }
public static void CreateModpackBtn_Click(object sender, EventArgs e) { string modpackName = Program.MasterForm.modpackName_txt.Text; IEnumerable <Panel> modFilesList = Program.MasterForm.createFilesPanel.Controls.OfType <Panel>(); if (modFilesList.Count() == 0) { Utility.ShowMsg("Please add at least one modded file entry", "Error"); return; } if (String.IsNullOrEmpty(modpackName)) { Utility.ShowMsg("Please enter a modpack name", "Error"); return; } List <String> chk = new List <string>(); ModpackCfg mCfg = new ModpackCfg { MCC_version = Utility.ReadFirstLine(Config.MCC_home + @"\build_tag.txt") }; foreach (Panel row in modFilesList) { string srcText = row.GetChildAtPoint(Config.sourceTextBoxPoint).Text; TextBox origTextbox = new TextBox(); // setting this to an empty value to avoid compile error on an impossible CS0165 string destText; if ((string)row.Tag == "normal") { destText = row.GetChildAtPoint(Config.destTextBoxPoint).Text; } else { origTextbox = (TextBox)row.GetChildAtPoint(Config.origTextBoxPoint); destText = row.GetChildAtPoint(Config.destTextBoxPointAlt).Text; } if (string.IsNullOrEmpty(srcText) || string.IsNullOrEmpty(destText) || ((string)row.Tag == "alt" && string.IsNullOrEmpty(origTextbox.Text))) { Utility.ShowMsg("Filepaths cannot be empty.", "Error"); return; } if (!File.Exists(srcText)) { Utility.ShowMsg("The source file '" + srcText + "' does not exist.", "Error"); return; } if (!destText.StartsWith(Config.MCC_home)) { Utility.ShowMsg("Destination files must be located within the MCC install directory. " + "You may need to configure this directory if you haven't done so already.", "Error"); return; } if ((string)row.Tag == "alt" && origTextbox.Enabled && !origTextbox.Text.StartsWith(Config.MCC_home)) { Utility.ShowMsg("Unmodified map files must be selected at their default install location within the MCC install directory to allow the patch " + "to be correctly applied when this modpack is installed. The file you selected does not appear to lie inside the MCC install directory." + "\r\nYou may need to configure this directory if you haven't done so already.", "Error"); return; } string patchType; if (Path.GetExtension(srcText) == ".asmp") { patchType = "patch"; } else { bool isOriginalFile; try { isOriginalFile = Utility.IsHaloFile(Utility.CompressPath(destText)); } catch (JsonReaderException) { Utility.ShowMsg(@"MCC Mod Manager could not parse Formats\filetree.json", "Error"); return; } if (isOriginalFile) { patchType = "replace"; } else { patchType = "create"; } } mCfg.entries.Add(new ModpackEntry { src = srcText, orig = (patchType == "patch") ? Utility.CompressPath(origTextbox.Text) : null, dest = Utility.CompressPath(destText), // make modpack compatable with any MCC_home directory type = patchType }); chk.Add(destText); } if (chk.Distinct().Count() != chk.Count) { Utility.ShowMsg("You have multiple files trying to write to the same destination.", "Error"); return; } EnsureModpackFolderExists(); String modpackFilename = modpackName + ".zip"; String zipPath = Config.Modpack_dir + @"\" + modpackFilename; if (File.Exists(zipPath)) { Utility.ShowMsg("A modpack with that name already exists.", "Error"); return; } Program.MasterForm.PBar_show(mCfg.entries.Count); try { using (var archive = ZipFile.Open(zipPath, ZipArchiveMode.Create)) { foreach (var entry in mCfg.entries) { Program.MasterForm.PBar_update(); String fileName = Path.GetFileName(entry.src); archive.CreateEntryFromFile(entry.src, fileName); // TODO: Fix issues when two source files have same name but diff path entry.src = fileName; // change src path to just modpack after archive creation but before json serialization } ZipArchiveEntry configFile = archive.CreateEntry("modpack_config.cfg"); string json = JsonConvert.SerializeObject(mCfg, Formatting.Indented); using (StreamWriter writer = new StreamWriter(configFile.Open())) { writer.WriteLine(json); } ZipArchiveEntry readmeFile = archive.CreateEntry("README.txt"); using (StreamWriter writer = new StreamWriter(readmeFile.Open())) { if (String.IsNullOrEmpty(Program.MasterForm.readmeTxt.Text)) { writer.WriteLine(Config._defaultReadmeText); } else { writer.WriteLine(Program.MasterForm.readmeTxt.Text); } } } } catch (NotSupportedException) { Utility.ShowMsg("The modpack name you have provided is not a valid filename on Windows.", "Error"); return; } Utility.ShowMsg("Modpack '" + modpackFilename + "' created.", "Info"); Program.MasterForm.PBar_hide(); ResetCreateModpacksTab(); MyMods.LoadModpacks(); return; }