public static bool CanConvert(string inputPath, string exe) { var outputPath = TempFolder.GetTempFile(); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); var proc = new Process { StartInfo = new ProcessStartInfo { FileName = exe, Arguments = "\"" + inputPath + "\" \"" + outputPath + "\"", UseShellExecute = false, CreateNoWindow = true } }; proc.Start(); proc.WaitForExit(); if (File.Exists(outputPath)) { File.Delete(outputPath); } if (Directory.Exists(outputPath)) { Directory.Delete(outputPath, true); } return(proc.ExitCode == 0); }
public async Task <Mod> AddMod(string[] files) { Mod mod = null; await Task.Run(() => { var tempFolder = TempFolder.GetTempFile(); tempFolder = Directory.CreateDirectory(tempFolder).FullName; foreach (var file in files) { if (File.GetAttributes(file).HasFlag(FileAttributes.Directory)) { var destination = Path.Combine(tempFolder, Path.GetFileName(file)); Util.CopyDirectory(file, destination); } else { File.Copy(file, Path.Combine(tempFolder, Path.GetFileName(file))); } } Util.ExtractAllFilesInDirectory(tempFolder); string modInfo = Directory.EnumerateFiles(tempFolder, "*", SearchOption.AllDirectories).Where(file => Path.GetFileName(file).Equals("mod.xml", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); string dropzone = Directory.EnumerateDirectories(tempFolder, "*", SearchOption.AllDirectories).Where(dir => Path.GetFileName(dir).Equals("dropzone", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); string skyfortress = Directory.EnumerateDirectories(tempFolder, "*", SearchOption.AllDirectories).Where(dir => Path.GetFileName(dir).Equals("dropzone_sky_fortress", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); mod = new Mod(); do { mod.Id = Guid.NewGuid().ToString("N"); } while (Directory.Exists(mod.Folder) || File.Exists(mod.Folder)); if (modInfo != null) { XmlDocument doc = new XmlDocument(); doc.Load(modInfo); var docElem = doc.DocumentElement; var author = docElem.GetElementsByTagName("Author"); if (author.Count > 0) { mod.Info.Author = author[0].InnerText; } var version = docElem.GetElementsByTagName("Version"); if (version.Count > 0) { mod.Info.Version = int.Parse(version[0].InnerText); } var modPage = docElem.GetElementsByTagName("ModPage"); if (modPage.Count > 0) { mod.Info.ModPage = modPage[0].InnerText; } var name = docElem.GetElementsByTagName("Name"); if (name.Count > 0) { mod.Info.DefaultName = name[0].InnerText; } var settings = docElem.GetElementsByTagName("Settings"); if (settings.Count > 0) { mod.Info.Settings = new ModSettingsViewModel((XmlElement)settings[0]); } } Directory.CreateDirectory(mod.Folder); if (modInfo != null) { File.Move(modInfo, Path.Combine(mod.Folder, "Mod.xml")); } if (dropzone != null) { Directory.Move(dropzone, Path.Combine(mod.Folder, "dropzone")); } if (skyfortress != null) { Directory.Move(skyfortress, Path.Combine(mod.Folder, "dropzone_sky_fortress")); } }); if (files.Length == 1) { var file = files[0]; if (Directory.Exists(file) && !file.Equals("dropzone", StringComparison.InvariantCultureIgnoreCase)) { mod.Name = Path.GetFileNameWithoutExtension(file).Replace("-", " ").Replace("_", " "); } if (File.Exists(file) && (file.EndsWith("zip") || file.EndsWith("rar") || file.EndsWith("7z"))) { mod.Name = Path.GetFileNameWithoutExtension(file).Replace("-", " ").Replace("_", " "); } } AddMod(mod); return(mod); }
public static List <string> GetDefaultFiles(string fileName) { var result = new List <string>(); var cachedFiles = Directory.EnumerateFiles(Settings.defaultFiles, Path.GetFileNameWithoutExtension(fileName) + "_*" + Path.GetExtension(fileName), SearchOption.AllDirectories); foreach (var file in cachedFiles) { result.Add(file); } //Find file from jc3 folders var fileLists = new List <string>(); fileLists.AddRange(Directory.EnumerateFiles(Path.Combine(Settings.files, "Filenames", "archives_win64"), "*", SearchOption.AllDirectories).Where(name => Regex.IsMatch(name, "game_hash_names[0-9]+\\.txt"))); fileLists = fileLists.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Substring(15))).ToList <string>(); var dlcFileLists = Directory.EnumerateFiles(Path.Combine(Settings.files, "Filenames", "dlc"), "*", SearchOption.AllDirectories).Where(name => Regex.IsMatch(name, "game_hash_names[0-9]+\\.txt")).ToList <string>(); dlcFileLists = dlcFileLists.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Substring(15))).ToList <string>(); fileLists.AddRange(dlcFileLists); var patchFileLists = Directory.EnumerateFiles(Path.Combine(Settings.files, "Filenames", "patch_win64")).Where(name => Regex.IsMatch(name, "game_hash_names[0-9]+\\.txt")).ToList <string>(); patchFileLists = patchFileLists.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Substring(15))).ToList <string>(); fileLists.AddRange(patchFileLists); var fileInfos = new List <DefaultFileInformation>(); foreach (string fileList in fileLists) { string[] lines = File.ReadAllLines(fileList); foreach (string line in lines) { if (line.Contains(fileName)) { string num = Path.GetFileName(fileList).Substring(15, Path.GetFileName(fileList).Length - 15 - 4); string tabFile = Path.Combine(Path.GetDirectoryName(fileList), "game" + num + ".tab"); fileInfos.Add(new DefaultFileInformation(line, tabFile)); } } } if (result.Count == fileInfos.Count) { return(result); } foreach (string file in result) { File.Delete(file); } foreach (var fileInfo in fileInfos) { var outputPath = TempFolder.GetTempFile(); string extractedFolder = GibbedsTools.Unpack(fileInfo.tabFile, outputPath, fileInfo.hash + "\\.*"); if (extractedFolder == null) { continue; } var files = Directory.EnumerateFiles(extractedFolder, fileInfo.hash + ".*", SearchOption.AllDirectories); foreach (string file in files) { if (new FileInfo(file).Length != fileInfo.size) { continue; } string newPath = Path.Combine(Settings.defaultFiles, fileInfo.relativePath); newPath = Util.GetUniqueFile(newPath); if (!Directory.Exists(Path.GetDirectoryName(newPath))) { Directory.CreateDirectory(Path.GetDirectoryName(newPath)); } File.Move(file, newPath); if (File.Exists(newPath)) { result.Add(newPath); } break; } } return(result); }
private static void Combine(List <string> originalFiles, List <string> files, FileFormat fileFormat, string outputPath) { Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); if (fileFormat == FileFormat.Property) { List <string> originalXml = originalFiles.Select(originalFile => GibbedsTools.ConvertProperty(originalFile, TempFolder.GetTempFile(), GibbedsTools.ConvertMode.Export)).ToList(); List <string> xmlFiles = files.Select(originalFile => GibbedsTools.ConvertProperty(originalFile, TempFolder.GetTempFile(), GibbedsTools.ConvertMode.Export)).ToList(); var xmlOutputPath = TempFolder.GetTempFile(); Combine(originalXml, xmlFiles, FileFormat.Xml, xmlOutputPath); GibbedsTools.ConvertProperty(xmlOutputPath, outputPath, GibbedsTools.ConvertMode.Import); } else if (fileFormat == FileFormat.Adf) { List <string> originalXml = originalFiles.Select(originalFile => GibbedsTools.ConvertProperty(originalFile, TempFolder.GetTempFile(), GibbedsTools.ConvertMode.Export)).ToList(); List <string> xmlFiles = files.Select(originalFile => GibbedsTools.ConvertProperty(originalFile, TempFolder.GetTempFile(), GibbedsTools.ConvertMode.Export)).ToList(); var xmlOutputPath = TempFolder.GetTempFile(); Combine(originalXml, xmlFiles, FileFormat.Xml, xmlOutputPath); GibbedsTools.ConvertAdf(xmlOutputPath, outputPath); } else if (fileFormat == FileFormat.Xml) { var fileNames = rootFiles; if (files != rootFiles) { fileNames = rootFiles.Select(item => Path.Combine(item, Path.GetFileName(originalFiles[0]))).ToList <string>(); } XmlCombiner.Combine(originalFiles, files, fileNames, notifyCollissions, outputPath); } else if (fileFormat == FileFormat.Unknown) { OverrideCombine(originalFiles, files, outputPath, false); } else if (fileFormat == FileFormat.SmallArchive) { var originalUnpacked = originalFiles.Select(file => GibbedsTools.SmallUnpack(file, TempFolder.GetTempFile())).ToList(); var unpackedFiles = files.Select(file => GibbedsTools.SmallUnpack(file, TempFolder.GetTempFile())).ToList(); foreach (string file in Directory.EnumerateFiles(originalUnpacked[originalUnpacked.Count - 1], "*", SearchOption.AllDirectories)) { var correspondingOriginals = new List <string>(); foreach (var unpackedFile in originalUnpacked) { string path = Path.Combine(unpackedFile, file.Substring(originalUnpacked[0].Length + 1)); correspondingOriginals.Add(path); } var correspondingFiles = new List <string>(); foreach (string unpackedFile in unpackedFiles) { string path = Path.Combine(unpackedFile, file.Substring(originalUnpacked[0].Length + 1)); correspondingFiles.Add(path); } Combine(correspondingOriginals, correspondingFiles, FileFormats.GetFileFormat(file), file); } GibbedsTools.SmallPack(originalUnpacked[originalUnpacked.Count - 1], outputPath); } }