diff --git a/src/commands/install.rs b/src/commands/install.rs index caa1b74..590ade8 100644 --- a/src/commands/install.rs +++ b/src/commands/install.rs @@ -40,6 +40,11 @@ impl Install { let client = reqwest::Client::new(); for mod_name in &self.mods { + if config.mods.contains_key(mod_name) { + println!("{} mod already installed, skipping...", mod_name); + continue; + } + let url = format!("{}/project/{}/version", Self::BASE_URL, mod_name); let params = InstallQueryParams { diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 83e620d..51a02d0 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -1,3 +1,4 @@ pub mod create; pub mod install; pub mod search; +pub mod update; diff --git a/src/commands/update.rs b/src/commands/update.rs new file mode 100644 index 0000000..46576b3 --- /dev/null +++ b/src/commands/update.rs @@ -0,0 +1,28 @@ +use std::error::Error; + +pub struct Update { + mods_only: bool, + loader_only: bool, + loader_version: Option, + version: Option, +} + +impl Update { + pub fn new( + mods_only: bool, + loader_only: bool, + loader_version: Option, + version: Option, + ) -> Self { + Self { + mods_only, + loader_only, + loader_version, + version, + } + } + + pub async fn run(&self) -> Result<(), Box> { + Ok(()) + } +} diff --git a/src/main.rs b/src/main.rs index 6d33756..9d51201 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ mod commands; mod models; mod utils; -use crate::commands::{create::Create, install::Install, search::Search}; +use crate::commands::{create::Create, install::Install, search::Search, update::Update}; use clap::{ Parser, Subcommand, builder::styling::{self}, @@ -75,6 +75,25 @@ enum Commands { #[arg(trailing_var_arg = true)] mods: Vec, }, + + /// Update minecraft/mods/loader for project in current directory + Update { + /// Only update mods to latest version for current minecraft version + #[arg(long, conflicts_with_all = ["loader_only", "loader_version"])] + mods_only: bool, + + /// Only update mod loader to latest version + #[arg(long, conflicts_with_all = ["mods_only", "version"])] + loader_only: bool, + + /// Specify mod loader version to update to + #[arg(long, conflicts_with = "mods_only")] + loader_version: Option, + + /// Specify minecraft version to update to + #[arg(long, conflicts_with = "loader_only")] + version: Option, + }, } #[tokio::main] @@ -120,6 +139,20 @@ async fn main() -> Result<(), Box> { let install = Install::new(mods); install.run().await?; } + Commands::Update { + mods_only, + loader_only, + loader_version, + version, + } => { + let update = Update::new( + mods_only, + loader_only, + loader_version, + version, + ); + update.run().await?; + } } Ok(())