public string[] GetDataFiles(string path, string pattern, bool recurse) { var dataFiles = _omod.GetDataFiles() .FileEnumeration(path, pattern, recurse) .Select(x => x.Name); return(dataFiles.ToArray()); }
private static async Task <Dictionary <RelativePath, T> > GatheringExtractWithOMOD <T>(Stream archive, Predicate <RelativePath> shouldExtract, Func <RelativePath, IStreamFactory, ValueTask <T> > mapfn) { var tmpFile = new TempFile(); await tmpFile.Path.WriteAllAsync(archive); var dest = await TempFolder.Create(); Utils.Log($"Extracting {(string)tmpFile.Path}"); Framework.Settings.TempPath = (string)dest.Dir; Framework.Settings.CodeProgress = new OMODProgress(); var omod = new OMOD((string)tmpFile.Path); omod.GetDataFiles(); omod.GetPlugins(); var results = new Dictionary <RelativePath, T>(); foreach (var file in dest.Dir.EnumerateFiles()) { var path = file.RelativeTo(dest.Dir); if (!shouldExtract(path)) { continue; } var result = await mapfn(path, new NativeFileStreamFactory(file, path)); results.Add(path, result); } return(results); }
private static void ExtractAllWithOMOD(string source, string dest) { Utils.Log($"Extracting {Path.GetFileName(source)}"); Framework.Settings.TempPath = dest; Framework.Settings.CodeProgress = new OMODProgress(); var omod = new OMOD(source); omod.GetDataFiles(); omod.GetPlugins(); }
private static void ExtractAllWithOMOD(AbsolutePath source, AbsolutePath dest) { Utils.Log($"Extracting {(string)source.FileName}"); Framework.Settings.TempPath = (string)dest; Framework.Settings.CodeProgress = new OMODProgress(); var omod = new OMOD((string)source); omod.GetDataFiles(); omod.GetPlugins(); }
private static async Task <ExtractedFiles> ExtractAllWithOMOD(AbsolutePath source) { var dest = await TempFolder.Create(); Utils.Log($"Extracting {(string)source.FileName}"); Framework.Settings.TempPath = (string)dest.Dir; Framework.Settings.CodeProgress = new OMODProgress(); var omod = new OMOD((string)source); omod.GetDataFiles(); omod.GetPlugins(); return(new ExtractedFiles(dest)); }
public void TestExtraction() { Files.Do(f => { var omod = new OMOD(f.FileName); Assert.IsNotNull(omod); var data = omod.GetDataFiles(); Assert.IsNotNull(data); var plugins = omod.GetPlugins(); Assert.IsTrue(omod.AllPlugins.Count == 0 && plugins == null || omod.AllPlugins.Count >= 1 && plugins != null); }); }
public void TestOBMMScript() { Files.Do(f => { var omod = new OMOD(f.FileName); Assert.IsNotNull(omod); var data = omod.GetDataFiles(); var plugins = omod.GetPlugins(); var scriptFunctions = new ScriptFunctions(); var srd = ScriptRunner.RunScript(omod, scriptFunctions, data, plugins); Assert.IsNotNull(srd); Assert.IsTrue(!srd.CancelInstall); srd.Pretty(omod, data, plugins); Assert.IsNotNull(srd.InstallFiles); }); }
public static ScriptReturnData RunScript(OMOD omod, IScriptFunctions scriptFunctions) { return(ExecuteScript(omod.GetScript(), omod.GetDataFiles(), omod.GetPlugins(), scriptFunctions)); }
public void TestOMODCreation() { var imageFile = Path.Combine("files", "image.png"); Assert.True(File.Exists(imageFile)); using var bitmap = (Bitmap)Image.FromFile(imageFile); var dataFile = Path.Combine("files", "data.txt"); var pluginFile = Path.Combine("files", "plugin.esp"); Assert.True(File.Exists(dataFile)); Assert.True(File.Exists(pluginFile)); var options = new OMODCreationOptions(new Version(1, 2, 3)) { Name = "erri120's Mod", Author = "erri120", Email = "*****@*****.**", Description = "The best mod in existence", Website = "https://github.com/erri120/OMODFramework", CompressionType = CompressionType.SevenZip, OMODCompressionLevel = CompressionLevel.Optimal, Readme = "This mod is very nice.", Script = "Some script", Image = bitmap, DataFiles = new List <OMODCreationFile> { new OMODCreationFile(dataFile, "data.txt") }, PluginFiles = new List <OMODCreationFile> { new OMODCreationFile(pluginFile, "plugin.esp") } }; using var ms = OMODCreation.CreateOMOD(options); using var omod = new OMOD(ms); Assert.Equal(options.Name, omod.Config.Name); Assert.Equal(options.Author, omod.Config.Author); Assert.Equal(options.Email, omod.Config.Email); Assert.Equal(options.Description, omod.Config.Description); Assert.Equal(options.Website, omod.Config.Website); Assert.Equal(options.CompressionType, omod.Config.CompressionType); Assert.Equal(options.Version, omod.Config.Version); var readme = omod.GetReadme(); Assert.Equal(options.Readme, readme); var script = omod.GetScript(); Assert.Equal(options.Script, script); var image = omod.GetImage(); Assert.Equal(options.Image.Size, image.Size); options.Image.Dispose(); var dataFiles = omod.GetDataFiles(); var pluginFiles = omod.GetPluginFiles(); Assert.Single(dataFiles); Assert.Single(pluginFiles); }
public void EndToEnd() { // Creation var ops = new OMODCreationOptions { Name = "I love, love... moist towelettes", Author = "erri120", Email = "*****@*****.**", Website = "https://github.com/erri120", Description = "The best OMOD you can find on the internet!", Image = "", MajorVersion = 6, MinorVersion = 6, BuildVersion = 6, CompressionType = CompressionType.SevenZip, DataFileCompressionLevel = CompressionLevel.High, OMODCompressionLevel = CompressionLevel.Medium, ESPs = new List <string>(0), ESPPaths = new List <string>(0), DataFiles = ModFiles, DataFilePaths = FolderStructure, Readme = Readme, Script = Script }; OMOD.CreateOMOD(ops, OMODFile); Assert.IsTrue(File.Exists(OMODFile)); // Test parsing var omod = new OMOD(OMODFile); Assert.IsNotNull(omod); Assert.IsTrue(CompareCreationToFile(ref ops, ref omod)); // Test extraction var data = omod.GetDataFiles(); var fList1 = new List <FileInfo>(); var fList2 = new List <FileInfo>(); Directory.GetFiles("files", "*", SearchOption.AllDirectories).Do(f => { fList1.Add(new FileInfo(f)); }); Directory.GetFiles(data, "*", SearchOption.AllDirectories).Do(f => { fList2.Add(new FileInfo(f)); }); Assert.IsTrue(fList1.Count == fList2.Count); for (var i = 0; i < fList1.Count; i++) { var f1 = fList1[i]; var f2 = fList2[i]; Assert.IsTrue(Equals(f1, f2, Path.GetFullPath("files"), data)); } // Test scripting var scriptFunctions = new ScriptFunctions(); var srd = ScriptRunner.RunScript(omod, scriptFunctions, data); Assert.IsNotNull(srd); Assert.IsTrue(!srd.CancelInstall); Assert.IsTrue(srd.CopyDataFiles.Count == 1 && srd.CopyDataFiles.TryGetValue(new ScriptCopyDataFile("A\\A.txt", "meshes\\a.txt"), out _)); Assert.IsTrue(srd.InstallData.Contains("something.txt")); }
internal static OMODCompressedFile GetDataFile(this OMOD omod, string file) { var compressedFile = omod.GetDataFiles().First(x => x.Name.Equals(file.MakePath(), StringComparison.OrdinalIgnoreCase)); return(compressedFile); }
public void TestCreation() { if (File.Exists("test.omod")) { File.Delete("test.omod"); } Directory.CreateDirectory(Path.Combine(Framework.Settings.TempPath, "text_files")); var file1 = Path.Combine(Framework.Settings.TempPath, "file.txt"); var file2 = Path.Combine(Framework.Settings.TempPath, "file2.txt"); var file3 = Path.Combine(Framework.Settings.TempPath, "text_files", "file3.txt"); var text1 = "This is some text"; var text2 = "This is more text"; var text3 = "MORE TEXT !!!!!!!!"; File.WriteAllText(file1, text1); File.WriteAllText(file2, text2); File.WriteAllText(file3, text3); var ops = new OMODCreationOptions { Name = "Test OMOD", Author = "erri120", Email = "*****@*****.**", Website = "https://github.com/erri120", Description = "The best OMOD you can find on the internet!", Image = "", MajorVersion = 1, MinorVersion = 0, BuildVersion = 0, CompressionType = CompressionType.SevenZip, DataFileCompressionLevel = CompressionLevel.Medium, OMODCompressionLevel = CompressionLevel.Medium, ESPs = new List <string>(0), ESPPaths = new List <string>(0), DataFiles = new List <string> { file1, file2, file3 }, DataFilePaths = new List <string> { "file.txt", "file2.txt", "text_files\\file3.txt" }, Readme = "", Script = "" }; OMOD.CreateOMOD(ops, "test.omod"); Assert.IsTrue(File.Exists("test.omod")); var omod = new OMOD("test.omod"); Assert.IsNotNull(omod); Assert.IsTrue(omod.ModName == ops.Name); Assert.IsTrue(omod.Author == ops.Author); Assert.IsTrue(omod.AllPlugins.Count == ops.ESPs.Count); Assert.IsTrue(omod.AllDataFiles.Count == ops.DataFiles.Count); var data = omod.GetDataFiles(); Directory.EnumerateFiles(data, "*", SearchOption.AllDirectories).Do(file => { var contents = File.ReadAllText(file); Assert.IsTrue(contents == text1 || contents == text2 || contents == text3); }); }