use std::io::{Error, ErrorKind}; use crate::{modrinth::{project, versions}, config::Cfg, db::insert_mod, Modloader}; pub async fn add(config: Cfg, mc_mod: String) -> Result<(), Box> { println!("Adding"); let project = project(String::from(&config.apis.modrinth), &mc_mod).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?; 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"), } }