internal AScriptHandler(OMOD omod, string script, OMODScriptSettings settings, string?extractionFolder) { ScriptSettings = settings; OMOD = omod; Script = script; var guid = Guid.NewGuid(); ExtractionFolder = extractionFolder ?? Path.Combine(Path.GetTempPath(), "OMODFramework", guid.ToString("D")); DataFolder = Path.Combine(ExtractionFolder, "data"); PluginsFolder = Path.Combine(ExtractionFolder, "plugins"); if (!settings.DryRun) { Directory.CreateDirectory(DataFolder); Directory.CreateDirectory(PluginsFolder); omod.ExtractFilesParallel(DataFolder, 4); if (omod.HasEntryFile(OMODEntryFileType.Plugins)) { omod.ExtractFiles(false, PluginsFolder); } } ScriptReturnData = new ScriptReturnData(DataFolder, PluginsFolder); ScriptFunctions = new ScriptFunctions(ScriptSettings, omod, ScriptReturnData); }
public async void TestOMODExtractionParallel() { var file = Path.Combine("files", "test.omod"); using var omod = new OMOD(file); const string outputDir = @"output-extraction-parallel"; if (Directory.Exists(outputDir)) { Directory.Delete(outputDir, true); } Directory.CreateDirectory(outputDir); var files = omod.GetFilesFromCRC(true); Assert.NotEmpty(files); omod.ExtractFilesParallel(outputDir, 4, 2, true); foreach (var outputPath in files.Select(compressedFile => Path.Combine(outputDir, compressedFile.Name))) { Assert.True(File.Exists(outputPath), $"File does not exist: {outputPath}"); } }