Allow for specifying default modpack providers when initializing a new project

This commit is contained in:
Warren Hood 2024-08-14 23:45:09 +02:00
parent 077fadabbf
commit 64bd74c2de
2 changed files with 26 additions and 7 deletions

View file

@ -27,6 +27,9 @@ enum Commands {
/// The modpack's modloader /// The modpack's modloader
#[arg(long, default_value_t = modpack::ModLoader::Fabric)] #[arg(long, default_value_t = modpack::ModLoader::Fabric)]
modloader: modpack::ModLoader, modloader: modpack::ModLoader,
/// Default providers to download the mods from for the modpack (can be overridden on a per-mod basis)
#[arg(long)]
providers: Vec<ModProvider>,
}, },
/// Create and initialise a new mcmpmgr project in the current directory /// Create and initialise a new mcmpmgr project in the current directory
New { New {
@ -38,6 +41,9 @@ enum Commands {
/// The modpack's modloader /// The modpack's modloader
#[arg(long, default_value_t = modpack::ModLoader::Fabric)] #[arg(long, default_value_t = modpack::ModLoader::Fabric)]
modloader: modpack::ModLoader, modloader: modpack::ModLoader,
/// Default providers to download the mods from for the modpack (can be overridden on a per-mod basis)
#[arg(long)]
providers: Vec<ModProvider>,
}, },
/// Add a new mod to the modpack /// Add a new mod to the modpack
Add { Add {
@ -48,8 +54,8 @@ enum Commands {
providers: Vec<ModProvider>, providers: Vec<ModProvider>,
/// URL to download the mod from /// URL to download the mod from
#[arg(long)] #[arg(long)]
url: Option<String> url: Option<String>,
} },
} }
fn main() -> Result<(), Box<dyn Error>> { fn main() -> Result<(), Box<dyn Error>> {
@ -62,6 +68,7 @@ fn main() -> Result<(), Box<dyn Error>> {
mc_version, mc_version,
modloader, modloader,
name, name,
providers,
} => { } => {
let dir = directory.unwrap_or(std::env::current_dir()?); let dir = directory.unwrap_or(std::env::current_dir()?);
let pack_name = if let Some(name) = name { let pack_name = if let Some(name) = name {
@ -80,14 +87,18 @@ fn main() -> Result<(), Box<dyn Error>> {
&pack_name, &pack_name,
dir.display() dir.display()
); );
let mc_modpack_meta: ModpackMeta = let mut mc_modpack_meta: ModpackMeta =
ModpackMeta::new(&pack_name, &mc_version, modloader); ModpackMeta::new(&pack_name, &mc_version, modloader);
for provider in providers.into_iter() {
mc_modpack_meta = mc_modpack_meta.provider(provider);
}
mc_modpack_meta.init_project(&dir)?; mc_modpack_meta.init_project(&dir)?;
} }
Commands::New { Commands::New {
name, name,
mc_version, mc_version,
modloader, modloader,
providers,
} => { } => {
let dir = std::env::current_dir()?.join(PathBuf::from(&name)); let dir = std::env::current_dir()?.join(PathBuf::from(&name));
println!( println!(
@ -96,10 +107,18 @@ fn main() -> Result<(), Box<dyn Error>> {
dir.display() dir.display()
); );
std::fs::create_dir_all(&dir)?; std::fs::create_dir_all(&dir)?;
let mc_modpack_meta: ModpackMeta = ModpackMeta::new(&name, &mc_version, modloader); let mut mc_modpack_meta: ModpackMeta =
ModpackMeta::new(&name, &mc_version, modloader);
for provider in providers.into_iter() {
mc_modpack_meta = mc_modpack_meta.provider(provider);
}
mc_modpack_meta.init_project(&dir)?; mc_modpack_meta.init_project(&dir)?;
} }
Commands::Add { name, providers, url } => { Commands::Add {
name,
providers,
url,
} => {
let mut modpack_meta = ModpackMeta::load_from_current_directory()?; let mut modpack_meta = ModpackMeta::load_from_current_directory()?;
let mut mod_meta = ModMeta::new(&name)?; let mut mod_meta = ModMeta::new(&name)?;
@ -111,7 +130,7 @@ fn main() -> Result<(), Box<dyn Error>> {
} }
modpack_meta = modpack_meta.add_mod(mod_meta); modpack_meta = modpack_meta.add_mod(mod_meta);
modpack_meta.save_current_dir_project()?; modpack_meta.save_current_dir_project()?;
}, }
} }
}; };

View file

@ -186,7 +186,7 @@ impl ModpackMeta {
let modpack_meta_file_path = directory.clone().join(PathBuf::from(MODPACK_FILENAME)); let modpack_meta_file_path = directory.clone().join(PathBuf::from(MODPACK_FILENAME));
if modpack_meta_file_path.exists() { if modpack_meta_file_path.exists() {
return Err(format!( return Err(format!(
"mcmodpack.toml already exists at {}", "{MODPACK_FILENAME} already exists at {}",
modpack_meta_file_path.display() modpack_meta_file_path.display()
) )
.into()); .into());