public bool ValidateBackups() { main.PrintMessage("Checking backups before proceeding..."); bool keepGoing = true; bool problemFound = false; if (MainClass._backupDirectory == null) { main.PrintMessage($"No backup directory specified, can't check the status of backups.\nYou are strongly recommended to add a backup directory in {Path.Combine(MainClass._projectconfDirectory.FullName, "config.cfg")} and running the 'backup' command before proceeding", 2); problemFound = true; } else if (MainClass._gameDirectory == null) { main.PrintMessage("No game directory specified, can't check if backups are up to date", 2); problemFound = true; } else { var filesToCheck = new XivDataFile[] { XivDataFile._01_Bgcommon, XivDataFile._04_Chara, XivDataFile._06_Ui }; ProblemChecker problemChecker = new ProblemChecker(MainClass._indexDirectory); foreach (var file in filesToCheck) { if (!File.Exists(Path.Combine(MainClass._backupDirectory.FullName, $"{file.GetDataFileName()}.win32.index"))) { main.PrintMessage($"One or more index files could not be found in {MainClass._backupDirectory.FullName}. Creating new ones or downloading them from the TexTools discord is recommended", 2); problemFound = true; break; } var outdatedBackupsCheck = problemChecker.CheckForOutdatedBackups(file, MainClass._backupDirectory); outdatedBackupsCheck.Wait(); if (!outdatedBackupsCheck.Result) { main.PrintMessage($"One or more index files are out of date in {MainClass._backupDirectory.FullName}. Recreating or downloading them from the TexTools discord is recommended", 2); problemFound = true; break; } } } if (problemFound) { if (PromptContinuation("Would you like to back up now?", true)) { main.BackupIndexes(); keepGoing = true; } else { keepGoing = PromptContinuation(); } } else { main.PrintMessage("All backups present and up to date", 1); } return(keepGoing); }
/// <summary> /// Event handler for the start over menu item clicked /// </summary> private async void Menu_StartOver_Click(object sender, RoutedEventArgs e) { var gameDirectory = new DirectoryInfo(Settings.Default.FFXIV_Directory); var index = new Index(gameDirectory); var outdated = false; if (index.IsIndexLocked(XivDataFile._0A_Exd)) { FlexibleMessageBox.Show(UIMessages.IndexLockedErrorMessage, UIMessages.IndexLockedErrorTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var result = FlexibleMessageBox.Show(UIMessages.StartOverMessage, UIMessages.StartOverTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (result == System.Windows.Forms.DialogResult.Yes) { var indexBackupsDirectory = new DirectoryInfo(Settings.Default.Backup_Directory); if (!Directory.Exists(indexBackupsDirectory.FullName)) { FlexibleMessageBox.Show(UIMessages.BackupFolderAccessErrorMessage, UIMessages.IndexBackupsErrorTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var filesToCheck = new XivDataFile[] { XivDataFile._01_Bgcommon, XivDataFile._04_Chara, XivDataFile._06_Ui }; var problemChecker = new ProblemChecker(gameDirectory); foreach (var xivDataFile in filesToCheck) { var backupFile = new DirectoryInfo($"{indexBackupsDirectory.FullName}\\{xivDataFile.GetDataFileName()}.win32.index"); if (!File.Exists(backupFile.FullName)) { continue; } var outdatedCheck = await problemChecker.CheckForOutdatedBackups(xivDataFile, indexBackupsDirectory); if (!outdatedCheck) { FlexibleMessageBox.Show(UIMessages.OutdatedBackupsErrorMessage, UIMessages.IndexBackupsErrorTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); outdated = true; } } await Task.Run(async() => { var modding = new Modding(gameDirectory); await modding.DeleteAllFilesAddedByTexTools(); var dat = new Dat(gameDirectory); var modListDirectory = new DirectoryInfo(Path.Combine(gameDirectory.Parent.Parent.FullName, XivStrings.ModlistFilePath)); var backupFiles = Directory.GetFiles(indexBackupsDirectory.FullName); // Make sure backups exist if (backupFiles.Length == 0) { FlexibleMessageBox.Show(string.Format(UIMessages.NoBackupsFoundErrorMessage, indexBackupsDirectory.FullName), UIMessages.BackupFilesMissingTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); // Toggle off all mods await modding.ToggleAllMods(false); } else if (outdated) { // Toggle off all mods await modding.ToggleAllMods(false); } else { // Copy backups to ffxiv folder foreach (var backupFile in backupFiles) { if (backupFile.Contains(".win32.index")) { File.Copy(backupFile, $"{gameDirectory}/{Path.GetFileName(backupFile)}", true); } } } // Delete modded dat files foreach (var xivDataFile in (XivDataFile[])Enum.GetValues(typeof(XivDataFile))) { var datFiles = await dat.GetModdedDatList(xivDataFile); foreach (var datFile in datFiles) { File.Delete(datFile); } if (datFiles.Count > 0) { await problemChecker.RepairIndexDatCounts(xivDataFile); } } // Delete mod list File.Delete(modListDirectory.FullName); modding.CreateModlist(); }); UpdateViews(ItemTreeView.SelectedItem as Category); await this.ShowMessageAsync(UIMessages.StartOverCompleteTitle, UIMessages.StartOverCompleteMessage); } }