private void LoadFromFileSystem(IReadOnlyFileSystem fileSystem, string directory) { var modpackFilename = Path.Combine(directory, "modpack.json"); var modFilename = Path.Combine(directory, "mod.json"); if (fileSystem.FileExists(modpackFilename)) { metadata = JsonConvert.DeserializeObject <ModpackMetadata>(fileSystem.ReadAllText(modpackFilename)); } else if (fileSystem.FileExists(modFilename)) { var modMetadata = JsonConvert.DeserializeObject <ModMetadata>(fileSystem.ReadAllText(modFilename)); modMetadata.Enabled = true; metadata = new ModpackMetadata { Name = modMetadata.Name, Description = modMetadata.Description, Mods = new List <ModMetadata> { modMetadata } }; } else { throw new FileNotFoundException("Could not find a modpack.json or a mod.json file in the given directory"); } mods = metadata.Mods.Select(m => new Mod(m, directory, fileSystem)).ToList(); }
public Modpack(string path, IFileSystem fileSystem) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } string directory; if (fileSystem.DirectoryExists(path)) { directory = path; LoadFromFileSystem(fileSystem, directory); } else if (fileSystem.FileExists(path)) { directory = Path.GetDirectoryName(path); var extension = Path.GetExtension(path); if (string.Equals(extension, ".zip", StringComparison.OrdinalIgnoreCase)) { zipStream = fileSystem.OpenFileReadOnly(path); zipArchive = new ZipArchive(zipStream); var zipFileSystem = new ZipFileSystem(zipArchive); LoadFromFileSystem(zipFileSystem, "/"); } else if (string.Equals(extension, ".csx", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".lua", StringComparison.OrdinalIgnoreCase)) { metadata = new ModpackMetadata { Name = Path.GetFileName(path), Description = null, Mods = new List <ModMetadata> { new ModMetadata { Name = Path.GetFileName(path), Description = null, Enabled = true, Scripts = new List <string> { Infrastructure.FileSystemExtensions.GetRelativePath(directory, path) } } } }; mods = metadata.Mods.Select(m => new Mod(m, directory, fileSystem)).ToList(); } else { throw new ArgumentException("Unsupported file extension: " + extension, nameof(path)); } } else { throw new DirectoryNotFoundException("Unable to find either a file or a directory at the given path: " + path); } }
public ModpackBuilder() { mods = new List <Mod>(); Metadata = new ModpackMetadata(); }