From 28706f6edf10a135a67334d7035948bab4064bef Mon Sep 17 00:00:00 2001 From: fxqnlr Date: Sun, 18 Dec 2022 23:11:50 +0100 Subject: dl add clean & all-lists; start of io --- src/commands/download.rs | 90 +++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 35 deletions(-) (limited to 'src/commands/download.rs') diff --git a/src/commands/download.rs b/src/commands/download.rs index 9f70499..0f9011c 100644 --- a/src/commands/download.rs +++ b/src/commands/download.rs @@ -1,49 +1,69 @@ -use crate::{files::{get_downloaded_versions, download_versions, delete_version, disable_version}, db::userlist_get_all_current_versions_with_mods, modrinth::get_raw_versions}; -#[allow(unused_imports)] -use crate::{List, get_current_list, config::Cfg, db::userlist_get_all_downloads, input::Input}; +use crate::{files::{get_downloaded_versions, download_versions, delete_version, disable_version}, db::{userlist_get_all_current_versions_with_mods, lists_get_all_ids, lists_get}, modrinth::get_raw_versions}; +use crate::{List, get_current_list, config::Cfg, input::Input}; pub async fn download(config: Cfg, input: Input) -> Result<(), Box> { - let current_list = get_current_list(config.clone())?; + let mut liststack: Vec = vec![]; + if input.all_lists { + let list_ids = lists_get_all_ids(config.clone())?; + for id in list_ids { + liststack.push(lists_get(config.clone(), id)?); + } + } else { + let current = get_current_list(config.clone())?; + println!("Checking for updates of mods in {}", current.id); + liststack.push(current) + } - let downloaded_versions = get_downloaded_versions(current_list.clone())?; - let current_version_ids = userlist_get_all_current_versions_with_mods(config.clone(), String::from(¤t_list.id))?; + for current_list in liststack { + let downloaded_versions = get_downloaded_versions(current_list.clone())?; + let current_version_ids = userlist_get_all_current_versions_with_mods(config.clone(), String::from(¤t_list.id))?; - let mut to_download: Vec = vec![]; - //(mod_id, version_id) - let mut to_disable: Vec<(String, String)> = vec![]; + let mut to_download: Vec = vec![]; + //(mod_id, version_id) + let mut to_disable: Vec<(String, String)> = vec![]; - for version in current_version_ids { - let mod_id = version.0; - let current_version = version.1; + for version in current_version_ids { + let mod_id = version.0; + let current_version = version.1; - let current_download = downloaded_versions.get(&mod_id); + let current_download = downloaded_versions.get(&mod_id); - if current_download.is_none() { - to_download.push(current_version); - } else { - let downloaded_version = current_download.ok_or("SOMETHING_HAS_REALLY_GONE_WRONG")?; - if ¤t_version != downloaded_version { - to_disable.push((mod_id.clone(), String::from(downloaded_version))); + if current_download.is_none() || input.clean { to_download.push(current_version); + } else { + let downloaded_version = current_download.ok_or("SOMETHING_HAS_REALLY_GONE_WRONG")?; + if ¤t_version != downloaded_version { + to_disable.push((mod_id.clone(), String::from(downloaded_version))); + to_download.push(current_version); + } } } - } - - if !to_download.is_empty() { - download_versions(current_list.clone(), get_raw_versions(String::from(&config.apis.modrinth), to_download).await).await?; - } else { - println!("There are no new versions to download"); - } - - if !to_disable.is_empty() { - for ver in to_disable { - if input.delete_old { - println!("Deleting version {} for mod {}", ver.1, ver.0); - delete_version(current_list.clone(), ver.1)?; - } else { - disable_version(config.clone(), current_list.clone(), ver.1, ver.0)?; - }; + + if input.clean { + let dl_path = ¤t_list.download_folder; + println!("Cleaning {}", dl_path); + for entry in std::fs::read_dir(dl_path)? { + let entry = entry?; + std::fs::remove_file(entry.path())?; + } + } + + if !to_download.is_empty() { + download_versions(current_list.clone(), get_raw_versions(String::from(&config.apis.modrinth), to_download).await).await?; + } else { + println!("There are no new versions to download"); + } + + if !to_disable.is_empty() { + for ver in to_disable { + if input.delete_old { + println!("Deleting version {} for mod {}", ver.1, ver.0); + delete_version(current_list.clone(), ver.1)?; + } else { + disable_version(config.clone(), current_list.clone(), ver.1, ver.0)?; + }; + } } } -- cgit v1.2.3