From 575d2493e8e5747bf65321f7277e52211d73e387 Mon Sep 17 00:00:00 2001 From: FxQnLr Date: Tue, 29 Nov 2022 22:59:19 +0100 Subject: fixed mod without matching specific version --- src/commands/modification.rs | 38 ++++++++++++++++++++++++++------------ src/commands/update.rs | 11 ++++++++--- 2 files changed, 34 insertions(+), 15 deletions(-) (limited to 'src/commands') diff --git a/src/commands/modification.rs b/src/commands/modification.rs index 8e39d11..ac23970 100644 --- a/src/commands/modification.rs +++ b/src/commands/modification.rs @@ -1,6 +1,6 @@ use std::io::{Error, ErrorKind}; -use crate::{modrinth::{project, versions, extract_current_version}, config::Cfg, db::{mods_insert, userlist_remove, mods_get_id, userlist_insert, mods_get_all_ids, userlist_get_all_ids}, input::{Input, Subcmd}, get_current_list, download_versions}; +use crate::{modrinth::{project, versions, extract_current_version, Version}, config::Cfg, db::{mods_insert, userlist_remove, mods_get_id, userlist_insert, mods_get_all_ids, userlist_get_all_ids}, input::{Input, Subcmd}, get_current_list, download_versions}; pub async fn modification(config: Cfg, input: Input) -> Result<(), Box> { @@ -26,27 +26,41 @@ async fn add(config: Cfg, input: Input) -> Result<(), Box let project = project(String::from(&config.apis.modrinth), &args[0]).await; let available_versions = versions(String::from(&config.apis.modrinth), String::from(&project.id), current_list.clone()).await; - - let current_id = extract_current_version(available_versions.clone())?; - - let current_version = available_versions.clone().into_iter().find(|v| v.id == current_id).unwrap(); - let file = current_version.clone().files.into_iter().find(|f| f.primary).unwrap().url; - let mut available_versions_vec: Vec = Vec::new(); - for ver in available_versions { - available_versions_vec.push(ver.id); + let current_version: Option; + let current_version_id: String; + let file: String; + if !available_versions.is_empty() { + let current_id = extract_current_version(available_versions.clone())?; + + current_version = Some(available_versions.clone().into_iter().find(|v| v.id == current_id).unwrap()); + + current_version_id = current_version.clone().unwrap().id; + + file = current_version.clone().ok_or("VERSION_CORRUPTED")?.files.into_iter().find(|f| f.primary).unwrap().url; + + for ver in available_versions { + available_versions_vec.push(ver.id); + }; + } else { + println!("There's currently no mod version for your specified target"); + current_version = None; + current_version_id = String::from("NONE"); + file = String::from("NONE"); + available_versions_vec.push(String::from("NONE")); } + //add to current list and mod table match userlist_get_all_ids(config.clone(), current_list.clone().id) { Ok(mods) => { if mods.contains(&project.id) { return Err(Box::new(Error::new(ErrorKind::Other, "MOD_ALREADY_ON_LIST"))); } else { - userlist_insert(config.clone(), String::from(¤t_list.id), String::from(&project.id), String::from(¤t_version.id), available_versions_vec, file)?; + userlist_insert(config.clone(), String::from(¤t_list.id), String::from(&project.id), String::from(¤t_version_id), available_versions_vec, file)?; } }, - Err(..) => userlist_insert(config.clone(), String::from(¤t_list.id), String::from(&project.id), String::from(¤t_version.id), available_versions_vec, file)?, + Err(..) => userlist_insert(config.clone(), String::from(¤t_list.id), String::from(&project.id), String::from(¤t_version_id), available_versions_vec, file)?, }; match mods_get_all_ids(config.clone()) { @@ -62,7 +76,7 @@ async fn add(config: Cfg, input: Input) -> Result<(), Box }, }; - if !input.disable_download { download_versions(current_list, vec![current_version]).await?; } + if !input.disable_download && current_version.is_some() { download_versions(current_list, vec![current_version.unwrap()]).await?; } Ok(()) } diff --git a/src/commands/update.rs b/src/commands/update.rs index c8f0880..be15cfa 100644 --- a/src/commands/update.rs +++ b/src/commands/update.rs @@ -86,10 +86,15 @@ async fn specific_update(config: Cfg, input: Input, list: List, project: Project let applicable_versions = versions(String::from(&config.apis.modrinth), String::from(&project.id), list.clone()).await; let mut versions: Vec = vec![]; - - for ver in &applicable_versions { - versions.push(String::from(&ver.id)); + + if !applicable_versions.is_empty() { + for ver in &applicable_versions { + versions.push(String::from(&ver.id)); + } + } else { + versions.push(String::from("NONE")); } + let mut current: Vec = vec![]; if input.clean || (versions.join("|") != userlist_get_applicable_versions(config.clone(), String::from(&list.id), String::from(&project.id))?) { -- cgit v1.2.3