internal void RecoverDeletedFiles() { DeletedFilesRecovered = true; var progressDialog = new GenericProgressForm { Text = "Scanning for deleted files..." }; progressDialog.OnProcess += (_, __) => { progressDialog.SetProgress("Scanning for deleted files, this may take a while..."); var package = (TreeViewPackageTag)mainListView.Tag; var foundFiles = Types.Viewers.Package.RecoverDeletedFiles(package.Package); Invoke((MethodInvoker)(() => { if (foundFiles.Count == 0) { var rootEmpty = mainTreeView.Nodes.Add(Types.Viewers.Package.DELETED_FILES_FOLDER, "No deleted files found", "_deleted", "_deleted"); rootEmpty.Tag = new TreeViewFolder(0); return; } mainTreeView.BeginUpdate(); var root = mainTreeView.Nodes.Add(Types.Viewers.Package.DELETED_FILES_FOLDER, $"Deleted files ({foundFiles.Count} files found)", "_deleted", "_deleted"); root.Tag = new TreeViewFolder(foundFiles.Count); var vpkName = Path.GetFileName(package.Package.FileName); foreach (var file in foundFiles) { mainTreeView.AddFileNode(root, file, vpkName, skipDeletedRootFolder: true); } root.Expand(); mainTreeView.EndUpdate(); })); }; progressDialog.ShowDialog(); }
public static void Export(string fileName, ExportData exportData) { var resource = exportData.Resource; var extension = FileExtract.GetExtension(resource); if (extension == null) { Console.WriteLine($"Export for \"{fileName}\" has no suitable extension"); return; } var filter = $"{extension} file|*.{extension}"; if (resource.ResourceType == ResourceType.Mesh || resource.ResourceType == ResourceType.Model) { if (exportData.FileType == ExportFileType.GLB) { extension = "glb"; filter = $"GLB file|*.glb|{filter}"; } else { extension = "gltf"; filter = $"glTF file|*.gltf|{filter}"; } } var dialog = new SaveFileDialog { FileName = Path.GetFileName(Path.ChangeExtension(fileName, extension)), InitialDirectory = Settings.Config.SaveDirectory, DefaultExt = extension, Filter = filter, }; var result = dialog.ShowDialog(); if (result != DialogResult.OK) { Console.WriteLine($"Export for \"{fileName}\" cancelled"); return; } Console.WriteLine($"Export for \"{fileName}\" started to \"{extension}\""); Settings.Config.SaveDirectory = Path.GetDirectoryName(dialog.FileName); Settings.Save(); var extractDialog = new GenericProgressForm(); extractDialog.OnProcess += (_, __) => { if (resource.ResourceType == ResourceType.Mesh && dialog.FilterIndex == 1) { var exporter = new GltfModelExporter { ProgressReporter = new Progress <string>(extractDialog.SetProgress), FileLoader = exportData.VrfGuiContext.FileLoader, }; exporter.ExportToFile(fileName, dialog.FileName, new Mesh(resource)); } else if (resource.ResourceType == ResourceType.Model && dialog.FilterIndex == 1) { var exporter = new GltfModelExporter { ProgressReporter = new Progress <string>(extractDialog.SetProgress), FileLoader = exportData.VrfGuiContext.FileLoader, }; exporter.ExportToFile(fileName, dialog.FileName, (Model)resource.DataBlock); } else { var data = FileExtract.Extract(resource).ToArray(); using var stream = dialog.OpenFile(); stream.Write(data, 0, data.Length); } Console.WriteLine($"Export for \"{fileName}\" completed"); }; extractDialog.ShowDialog(); }