use std::io::{Error, ErrorKind}; use crate::{modrinth::{project, versions}, config::Cfg, db::insert_mod, Modloader, input::Input}; pub async fn modification(config: Cfg, args: Option>) -> Result<(), Box> { if args.is_none() { return Err(Box::new(Error::new(ErrorKind::InvalidInput, "TOO_FEW_ARGUMENTS"))) } let arguments = Input::from(args.unwrap().join(" "))?; if arguments.args.is_none() { return Err(Box::new(Error::new(ErrorKind::InvalidInput, "TOO_FEW_ARGUMENTS"))); }; match arguments.command.as_str() { "add" => { add(config, arguments.args.unwrap()).await }, _ => Err(Box::new(Error::new(ErrorKind::InvalidInput, "UNKNOWN_SUBCOMMAND"))) } } pub async fn add(config: Cfg, args: Vec) -> Result<(), Box> { if args.len() < 1 { return Err(Box::new(Error::new(ErrorKind::InvalidInput, "TOO_FEW_ARGUMENTS"))); }; let project = project(String::from(&config.apis.modrinth), &args[0]).await; dbg!(&project); let loader = Modloader::Fabric; if project.versions.is_empty() { panic!("This should never happen"); }; let current_version = get_current(config, String::from(&project.id)).await?; //add to current list and mod table match insert_mod(project.id, project.title, current_version, project.versions, loader, String::from("1.19.2")) { Err(err) => { Err(Box::new(err)) }, Ok(()) => Ok(()), } } async fn get_current(config: Cfg, id: String) -> Result> { let available_versions = versions(config.apis.modrinth, id, Modloader::Fabric, String::from("1.19.2")).await; match available_versions.len() { 0 => Err(Box::new(Error::new(ErrorKind::NotFound, "NO_VERSIONS_AVAILABLE"))), //TODO compare publish dates 1.. => Ok(available_versions[0].id.to_string()), _ => panic!("available_versions should never be negative"), } }