/// <summary> /// Exports installed mods to a .ckan file. /// </summary> private void exportModListToolStripMenuItem_Click(object sender, EventArgs e) { var exportOptions = new List <ExportOption> { new ExportOption(ExportFileType.CkanFavourite, "CKAN favourites list (*.ckan)", "ckan"), new ExportOption(ExportFileType.Ckan, "CKAN modpack (enforces exact mod versions) (*.ckan)", "ckan"), new ExportOption(ExportFileType.PlainText, "Plain text (*.txt)", "txt"), new ExportOption(ExportFileType.Markdown, "Markdown (*.md)", "md"), new ExportOption(ExportFileType.BbCode, "BBCode (*.txt)", "txt"), new ExportOption(ExportFileType.Csv, "Comma-separated values (*.csv)", "csv"), new ExportOption(ExportFileType.Tsv, "Tab-separated values (*.tsv)", "tsv") }; var filter = string.Join("|", exportOptions.Select(i => i.ToString()).ToArray()); var dlg = new SaveFileDialog { Filter = filter, Title = Resources.ExportInstalledModsDialogTitle }; if (dlg.ShowDialog() == DialogResult.OK) { var exportOption = exportOptions[dlg.FilterIndex - 1]; // FilterIndex is 1-indexed if (exportOption.ExportFileType == ExportFileType.Ckan || exportOption.ExportFileType == ExportFileType.CkanFavourite) { bool recommends = false; bool versions = true; if (exportOption.ExportFileType == ExportFileType.CkanFavourite) { recommends = true; versions = false; } // Save, just to be certain that the installed-*.ckan metapackage is generated. RegistryManager mgr = RegistryManager.Instance(CurrentInstance); mgr.Save(true); mgr.ExportInstalled(dlg.FileName, recommends, versions); } else { var fileMode = File.Exists(dlg.FileName) ? FileMode.Truncate : FileMode.CreateNew; using (var stream = new FileStream(dlg.FileName, fileMode)) { var registry = RegistryManager.Instance(CurrentInstance).registry; new Exporter(exportOption.ExportFileType).Export(registry, stream); } } } }