/// <summary> /// The event handler for the create mod pack button /// </summary> /// <remarks> /// This is originally the help button, but has been repurposed /// </remarks> private async void ModPackWizard_CreateModPack(object sender, System.Windows.RoutedEventArgs e) { _progressController = await this.ShowProgressAsync(UIMessages.ModPackCreationMessage, UIMessages.PleaseStandByMessage); var wizPages = modPackWizard.Items; var modPackData = new ModPackData { Name = ModPackName.Text, Author = ModPackAuthor.Text, Version = VersionNumber, Description = ModPackDescription.Text, ModPackPages = new List <ModPackData.ModPackPage>() }; var pageIndex = 0; foreach (var wizPageItem in wizPages) { var wizPage = wizPageItem as WizardPage; if (wizPage.Content is WizardModPackControl control) { if (control.ModGroupList.Count > 0) { modPackData.ModPackPages.Add(new ModPackData.ModPackPage { PageIndex = pageIndex, ModGroups = control.ModGroupList }); } } pageIndex++; } if (modPackData.ModPackPages.Count > 0) { var progressIndicator = new Progress <double>(ReportProgress); var texToolsModPack = new TTMP(new DirectoryInfo(Properties.Settings.Default.ModPack_Directory), XivStrings.TexTools); await texToolsModPack.CreateWizardModPack(modPackData, progressIndicator); ModPackFileName = $"{ModPackName.Text}"; } else { ModPackFileName = "NoData"; } await _progressController.CloseAsync(); DialogResult = true; }
private async Task CreateAdvanced() { string modPackPath = Path.Combine(Properties.Settings.Default.ModPack_Directory, $"{ViewModel.Name}.ttmp2"); if (File.Exists(modPackPath)) { DialogResult overwriteDialogResult = FlexibleMessageBox.Show(new Wpf32Window(this), UIMessages.ModPackOverwriteMessage, UIMessages.OverwriteTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (overwriteDialogResult != System.Windows.Forms.DialogResult.Yes) { return; } } await LockUi(UIStrings.Creating_Modpack, null, null); try { TTMP texToolsModPack = new TTMP(new DirectoryInfo(Settings.Default.ModPack_Directory), XivStrings.TexTools); var index = new Index(XivCache.GameInfo.GameDirectory); var dat = new Dat(XivCache.GameInfo.GameDirectory); var modding = new Modding(XivCache.GameInfo.GameDirectory); var ModList = modding.GetModList(); var wizardData = new ModPackData() { Name = ViewModel.Name, Author = ViewModel.Author, Version = ViewModel.Version, Description = ViewModel.Description, Url = ViewModel.Url, ModPackPages = new List <ModPackData.ModPackPage>() }; var page = new ModPackData.ModPackPage() { PageIndex = 1, ModGroups = new List <ModGroup>() }; wizardData.ModPackPages.Add(page); foreach (var e in ViewModel.Entries) { var item = e.Item; var files = e.AllFiles; var group = new ModGroup() { GroupName = item.Name, SelectionType = "Multi", OptionList = new List <ModOption>() }; page.ModGroups.Add(group); var option = new ModOption { GroupName = group.GroupName, IsChecked = true, Name = GetNiceLevelName(e.Level, true, true), Description = "Item: " + item.Name + "\nInclusion Level: " + GetNiceLevelName(e.Level) + "\nPrimary Files:" + e.MainFiles.Count + "\nTotal Files:" + e.AllFiles.Count, SelectionType = "Multi", }; group.OptionList.Add(option); foreach (var file in e.AllFiles) { var exists = await index.FileExists(file); // This is a funny case where in order to create the modpack we actually have to write a default meta entry to the dats first. // If we had the right functions we could just load and serialize the data, but we don't atm. if (!exists && Path.GetExtension(file) == ".meta") { var meta = await ItemMetadata.GetMetadata(file); await ItemMetadata.SaveMetadata(meta, XivStrings.TexTools); } var offset = await index.GetDataOffset(file); var dataFile = IOUtil.GetDataFileFromPath(file); var compressedSize = await dat.GetCompressedFileSize(offset, dataFile); var modEntry = ModList.Mods.FirstOrDefault(x => x.fullPath == file); var modded = modEntry != null && modEntry.enabled == true; var fData = new ModData { Name = e.Item.Name, Category = e.Item.SecondaryCategory, FullPath = file, IsDefault = !modded, ModDataBytes = dat.GetRawData(offset, dataFile, compressedSize) }; option.Mods.Add(file, fData); } } // Okay modpack is now created internally, just need to save it. var progressIndicator = new Progress <double>(ReportProgressAdv); await texToolsModPack.CreateWizardModPack(wizardData, progressIndicator, true); FlexibleMessageBox.Show(new Wpf32Window(this), "Modpack Created Successfully.", "Modpack Created", MessageBoxButtons.OK, MessageBoxIcon.Information); await UnlockUi(this); DialogResult = true; } catch (Exception ex) { FlexibleMessageBox.Show(new Wpf32Window(this), "An Error occured while creating the modpack.\n\n" + ex.Message, "Modpack Creation Error", MessageBoxButtons.OK, MessageBoxIcon.Error); await UnlockUi(this); } }
/// <summary> /// The event handler for the create mod pack button /// </summary> /// <remarks> /// This is originally the help button, but has been repurposed /// </remarks> private async void ModPackWizard_CreateModPack(object sender, System.Windows.RoutedEventArgs e) { _progressController = await this.ShowProgressAsync(UIMessages.ModPackCreationMessage, UIMessages.PleaseStandByMessage); try { var wizPages = modPackWizard.Items; var modPackData = new ModPackData { Name = ModPackName.Text, Author = ModPackAuthor.Text, Version = VersionNumber, Description = ModPackDescription.Text, Url = ModPackUrl.Text, ModPackPages = new List <ModPackData.ModPackPage>() }; var pageIndex = 0; foreach (var wizPageItem in wizPages) { var wizPage = wizPageItem as WizardPage; if (wizPage.Content is WizardModPackControl control) { if (control.ModGroupList.Count > 0) { modPackData.ModPackPages.Add(new ModPackData.ModPackPage { PageIndex = pageIndex, ModGroups = control.ModGroupList }); } } pageIndex++; } if (modPackData.ModPackPages.Count > 0) { var progressIndicator = new Progress <double>(ReportProgress); var texToolsModPack = new TTMP(new DirectoryInfo(Properties.Settings.Default.ModPack_Directory), XivStrings.TexTools); var modPackPath = Path.Combine(Properties.Settings.Default.ModPack_Directory, $"{modPackData.Name}.ttmp2"); var overwriteModpack = false; if (File.Exists(modPackPath)) { var overwriteDialogResult = FlexibleMessageBox.Show(new Wpf32Window(this), UIMessages.ModPackOverwriteMessage, UIMessages.OverwriteTitle, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (overwriteDialogResult == System.Windows.Forms.DialogResult.Yes) { overwriteModpack = true; } else if (overwriteDialogResult == System.Windows.Forms.DialogResult.Cancel) { return; } } await texToolsModPack.CreateWizardModPack(modPackData, progressIndicator, overwriteModpack); ModPackFileName = $"{ModPackName.Text}"; } else { ModPackFileName = "NoData"; } } catch (Exception ex) { FlexibleMessageBox.Show("Failed to create modpack.\n\nError: " + ex.Message, "Modpack Creation Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } finally { await _progressController.CloseAsync(); } DialogResult = true; }