private void BtnUninstall_Click(object sender, EventArgs e) { btnInstall.Enabled = false; pb.Minimum = 0; pb.Maximum = FilesToMod.Count; pb.Step = 1; lInstallInfo.Text = "Uninstalling mod files"; foreach (var fi in FilesToMod) { // If file exists in gamepak, make a backup AAPakFileInfo rfi = restorepak.nullAAPakFileInfo; if (restorepak.GetFileByName(fi.name, ref rfi)) { var fileRestoreStream = restorepak.ExportFileAsStream(fi.name); fileRestoreStream.Position = 0; AAPakFileInfo restoreFileInfo = gamepak.nullAAPakFileInfo; if (!gamepak.AddFileFromStream(fi.name, fileRestoreStream, DateTime.FromFileTime(rfi.createTime), DateTime.FromFileTime(rfi.modifyTime), false, out restoreFileInfo)) { MessageBox.Show("Error restoring file " + fi.name); } else { restorepak.DeleteFile(rfi); } } pb.PerformStep(); pb.Refresh(); // System.Threading.Thread.Sleep(50); } // Remove added files if (restorepak.FileExists(ModNewFilesFileName)) { ReadNewFilesFromRestore(); foreach (var fn in FilesToMod) { if (RestoreNewFilesList.IndexOf(fn.name) < 0) { continue; } AAPakFileInfo delFileInfo = gamepak.nullAAPakFileInfo; if (gamepak.GetFileByName(fn.name, ref delFileInfo)) { gamepak.DeleteFile(delFileInfo); RestoreNewFilesList.Remove(fn.name); } } WriteNewFilesForRestore(); } lInstallInfo.Text = "Updating pak file headers"; lInstallInfo.Refresh(); restorepak.SaveHeader(); gamepak.SaveHeader(); pb.Value = pb.Maximum; MessageBox.Show("Mod has been uninstalled", "Uninstall", MessageBoxButtons.OK, MessageBoxIcon.Information); ValidateInstallOptions(); }
private void ValidateInstallOptions() { // TODO: Enabled buttons depending on the state of game_pak and restore_pak compared to the aamod pak // Get file list from mod pak FilesToMod.Clear(); foreach (var fi in modpak.files) { if (fi.name.StartsWith(ModFileFolderName)) { // Don't include own mod files } else { // TODO: compare to gamepak to check if installed or not FilesToMod.Add(fi); } } FilesToInstall.Clear(); FilesAddedWithInstall.Clear(); foreach (var fi in FilesToMod) { AAPakFileInfo gfi = gamepak.nullAAPakFileInfo; if (gamepak.GetFileByName(fi.name, ref gfi)) { if ((fi.size != gfi.size) || (!fi.md5.SequenceEqual(gfi.md5))) { FilesToInstall.Add(fi); } } else { FilesToInstall.Add(fi); FilesAddedWithInstall.Add(fi); } } FilesToUnInstall.Clear(); foreach (var fi in FilesToMod) { if (restorepak.FileExists(fi.name)) { FilesToUnInstall.Add(fi); } } if (FilesToInstall.Count > 0) { btnInstall.Enabled = true; string s = string.Empty; if (FilesToMod.Count != 1) { s += "Mod " + FilesToMod.Count.ToString() + " file(s)"; } else { s += "Mod " + FilesToMod.Count.ToString() + " file"; } if (FilesAddedWithInstall.Count > 0) { s += ", with " + FilesAddedWithInstall.Count.ToString() + " new"; } lInstallInfo.Text = s; } // Check if these same files are all present in the restore pak // If not, disable the uninstall option (likely not installed) // TODO: btnUninstall.Enabled = (FilesToUnInstall.Count > 0); }