summaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/download.rs6
-rw-r--r--src/commands/io.rs34
-rw-r--r--src/commands/list.rs33
-rw-r--r--src/commands/modification.rs30
-rw-r--r--src/commands/update.rs32
5 files changed, 66 insertions, 69 deletions
diff --git a/src/commands/download.rs b/src/commands/download.rs
index 6831714..fea3f34 100644
--- a/src/commands/download.rs
+++ b/src/commands/download.rs
@@ -9,13 +9,13 @@ use crate::{
9 modrinth::get_raw_versions, 9 modrinth::get_raw_versions,
10}; 10};
11 11
12pub async fn download(config: Cfg, liststack: Vec<List>, clean: bool, delete_old: bool) -> MLE<()> { 12pub async fn download(config: &Cfg, liststack: Vec<List>, clean: bool, delete_old: bool) -> MLE<()> {
13 for current_list in liststack { 13 for current_list in liststack {
14 println!("Downloading current versions of mods in {}", current_list.id); 14 println!("Downloading current versions of mods in {}", current_list.id);
15 let downloaded_versions = get_downloaded_versions(current_list.clone())?; 15 let downloaded_versions = get_downloaded_versions(current_list.clone())?;
16 // println!("To download: {:#?}", downloaded_versions); 16 // println!("To download: {:#?}", downloaded_versions);
17 let current_version_ids = match userlist_get_all_current_versions_with_mods( 17 let current_version_ids = match userlist_get_all_current_versions_with_mods(
18 config.clone(), 18 config,
19 String::from(&current_list.id), 19 String::from(&current_list.id),
20 ) { 20 ) {
21 Ok(i) => Ok(i), 21 Ok(i) => Ok(i),
@@ -66,7 +66,7 @@ pub async fn download(config: Cfg, liststack: Vec<List>, clean: bool, delete_old
66 // println!("Deleting version {} for mod {}", ver.1, ver.0); 66 // println!("Deleting version {} for mod {}", ver.1, ver.0);
67 delete_version(current_list.clone(), ver.1)?; 67 delete_version(current_list.clone(), ver.1)?;
68 } else { 68 } else {
69 disable_version(config.clone(), current_list.clone(), ver.1, ver.0)?; 69 disable_version(config, current_list.clone(), ver.1, ver.0)?;
70 }; 70 };
71 } 71 }
72 } 72 }
diff --git a/src/commands/io.rs b/src/commands/io.rs
index 2a26f1d..43e642a 100644
--- a/src/commands/io.rs
+++ b/src/commands/io.rs
@@ -21,9 +21,9 @@ struct ExportVersion {
21} 21}
22 22
23impl ExportVersion { 23impl ExportVersion {
24 fn from(config: Cfg, list_id: &str, mod_id: &str) -> MLE<Self> { 24 fn from(config: &Cfg, list_id: &str, mod_id: &str) -> MLE<Self> {
25 Ok(Self { 25 Ok(Self {
26 version: userlist_get_current_version(config.clone(), list_id, mod_id)?, 26 version: userlist_get_current_version(config, list_id, mod_id)?,
27 set: userlist_get_set_version(config, list_id, mod_id)? 27 set: userlist_get_set_version(config, list_id, mod_id)?
28 }) 28 })
29 } 29 }
@@ -39,18 +39,18 @@ struct ExportList {
39} 39}
40 40
41impl ExportList { 41impl ExportList {
42 pub fn from(config: Cfg, list_id: String, download: bool) -> MLE<Self> { 42 pub fn from(config: &Cfg, list_id: String, download: bool) -> MLE<Self> {
43 let list = lists_get(config.clone(), String::from(&list_id))?; 43 let list = lists_get(config, String::from(&list_id))?;
44 44
45 let mut dl_folder = None; 45 let mut dl_folder = None;
46 if download { 46 if download {
47 dl_folder = Some(list.download_folder) 47 dl_folder = Some(list.download_folder)
48 }; 48 };
49 49
50 let mods = userlist_get_all_ids(config.clone(), &list_id)?; 50 let mods = userlist_get_all_ids(config, &list_id)?;
51 let mut versions = vec![]; 51 let mut versions = vec![];
52 for m in mods { 52 for m in mods {
53 versions.push(ExportVersion::from(config.clone(), &list_id, &m)?) 53 versions.push(ExportVersion::from(config, &list_id, &m)?)
54 } 54 }
55 55
56 Ok(Self { 56 Ok(Self {
@@ -63,16 +63,16 @@ impl ExportList {
63 } 63 }
64} 64}
65 65
66pub fn export(config: Cfg, list: Option<String>) -> MLE<()> { 66pub fn export(config: &Cfg, list: Option<String>) -> MLE<()> {
67 let mut list_ids: Vec<String> = vec![]; 67 let mut list_ids: Vec<String> = vec![];
68 if list.is_none() { 68 if list.is_none() {
69 list_ids = lists_get_all_ids(config.clone())?; 69 list_ids = lists_get_all_ids(config)?;
70 } else { 70 } else {
71 list_ids.push(lists_get(config.clone(), list.unwrap())?.id); 71 list_ids.push(lists_get(config, list.unwrap())?.id);
72 } 72 }
73 let mut lists: Vec<ExportList> = vec![]; 73 let mut lists: Vec<ExportList> = vec![];
74 for list_id in list_ids { 74 for list_id in list_ids {
75 lists.push(ExportList::from(config.clone(), list_id, true)?); 75 lists.push(ExportList::from(config, list_id, true)?);
76 } 76 }
77 77
78 let toml = toml::to_string(&Export { lists })?; 78 let toml = toml::to_string(&Export { lists })?;
@@ -85,7 +85,7 @@ pub fn export(config: Cfg, list: Option<String>) -> MLE<()> {
85 Ok(()) 85 Ok(())
86} 86}
87 87
88pub async fn import(config: Cfg, file_str: String, direct_download: bool) -> MLE<()> { 88pub async fn import(config: &Cfg, file_str: String, direct_download: bool) -> MLE<()> {
89 let mut file = File::open(file_str)?; 89 let mut file = File::open(file_str)?;
90 let mut content = String::new(); 90 let mut content = String::new();
91 file.read_to_string(&mut content)?; 91 file.read_to_string(&mut content)?;
@@ -99,18 +99,18 @@ pub async fn import(config: Cfg, file_str: String, direct_download: bool) -> MLE
99 download_folder: exportlist.download_folder.ok_or("NO_DL").unwrap(), 99 download_folder: exportlist.download_folder.ok_or("NO_DL").unwrap(),
100 }; 100 };
101 lists_insert( 101 lists_insert(
102 config.clone(), 102 config,
103 list.id.clone(), 103 &list.id,
104 list.mc_version.clone(), 104 &list.mc_version,
105 list.modloader.clone(), 105 &list.modloader,
106 String::from(&list.download_folder), 106 &list.download_folder,
107 )?; 107 )?;
108 108
109 let mut ver_ids = vec![]; 109 let mut ver_ids = vec![];
110 for id in exportlist.versions { 110 for id in exportlist.versions {
111 ver_ids.push(AddMod { id: IDSelector::VersionID(id.version), set_version: id.set} ); 111 ver_ids.push(AddMod { id: IDSelector::VersionID(id.version), set_version: id.set} );
112 } 112 }
113 mod_add(config.clone(), ver_ids, list, direct_download).await?; 113 mod_add(config, ver_ids, list, direct_download).await?;
114 } 114 }
115 Ok(()) 115 Ok(())
116} 116}
diff --git a/src/commands/list.rs b/src/commands/list.rs
index c07823b..95f9927 100644
--- a/src/commands/list.rs
+++ b/src/commands/list.rs
@@ -16,30 +16,31 @@ pub struct List {
16 pub download_folder: String, 16 pub download_folder: String,
17} 17}
18 18
19pub fn get_current_list(config: Cfg) -> MLE<List> { 19pub fn get_current_list(config: &Cfg) -> MLE<List> {
20 let id = config_get_current_list(config.clone())?; 20 let id = config_get_current_list(config)?;
21 lists_get(config, id) 21 lists_get(config, id)
22} 22}
23 23
24pub fn list_add( 24pub fn list_add(
25 config: Cfg, 25 config: &Cfg,
26 id: String, 26 id: &str,
27 mc_version: String, 27 mc_version: &str,
28 modloader: Modloader, 28 modloader: &Modloader,
29 directory: String, 29 directory: &str,
30) -> MLE<()> { 30) -> MLE<()> {
31 lists_insert(config, id, mc_version, modloader, directory) 31 lists_insert(config, id, mc_version, modloader, directory)
32} 32}
33 33
34pub fn list_change(config: Cfg, id: String) -> MLE<()> { 34pub fn list_change(config: &Cfg, id: String) -> MLE<()> {
35 if !lists_get_all_ids(config.clone())?.into_iter().any(|l| l == id) { 35 if !lists_get_all_ids(config)?.into_iter().any(|l| l == id) {
36 return Err(MLError::new(ErrorType::ArgumentError, "List not found")); 36 return Err(MLError::new(ErrorType::ArgumentError, "List not found"));
37 }; 37 };
38 println!("Change default list to: {}", id); 38 println!("Change default list to: {}", id);
39 config_change_current_list(config, id) 39 config_change_current_list(config, id)
40} 40}
41 41
42pub fn list_remove(config: Cfg, id: String) -> MLE<()> { 42pub fn list_remove(config: &Cfg, id: String) -> MLE<()> {
43 //TODO add logging
43 lists_remove(config, id) 44 lists_remove(config, id)
44} 45}
45 46
@@ -50,7 +51,7 @@ pub fn list_remove(config: Cfg, id: String) -> MLE<()> {
50/// * `config` - The current config 51/// * `config` - The current config
51/// * `args` - All args, to extract the new version 52/// * `args` - All args, to extract the new version
52pub async fn list_version( 53pub async fn list_version(
53 config: Cfg, 54 config: &Cfg,
54 id: String, 55 id: String,
55 mc_version: String, 56 mc_version: String,
56 download: bool, 57 download: bool,
@@ -61,20 +62,20 @@ pub async fn list_version(
61 id, mc_version 62 id, mc_version
62 ); 63 );
63 64
64 lists_version(config.clone(), &id, &mc_version)?; 65 lists_version(config, &id, &mc_version)?;
65 66
66 println!( 67 println!(
67 "\nCheck for updates for new minecraft version in list {}", 68 "\nCheck for updates for new minecraft version in list {}",
68 id 69 id
69 ); 70 );
70 let list = lists_get(config.clone(), id)?; 71 let list = lists_get(config, id)?;
71 update(config, vec![list], true, download, delete).await 72 update(config, vec![list], true, download, delete).await
72} 73}
73 74
74pub fn list_list(config: Cfg) -> MLE<()> { 75pub fn list_list(config: &Cfg) -> MLE<()> {
75 let lists = lists_get_all_ids(config.clone())?; 76 let lists = lists_get_all_ids(config)?;
76 for list in lists { 77 for list in lists {
77 let l = lists_get(config.clone(), list)?; 78 let l = lists_get(config, list)?;
78 println!("{}: | {} | {}", l.id, l.mc_version, l.modloader) 79 println!("{}: | {} | {}", l.id, l.mc_version, l.modloader)
79 } 80 }
80 Ok(()) 81 Ok(())
diff --git a/src/commands/modification.rs b/src/commands/modification.rs
index 730583d..31931f8 100644
--- a/src/commands/modification.rs
+++ b/src/commands/modification.rs
@@ -11,11 +11,9 @@ use crate::{
11 error::{ErrorType, MLError, MLE}, 11 error::{ErrorType, MLError, MLE},
12 files::{delete_version, download_versions}, 12 files::{delete_version, download_versions},
13 modrinth::{extract_current_version, get_raw_versions, project, projects, versions, Version}, 13 modrinth::{extract_current_version, get_raw_versions, project, projects, versions, Version},
14 List, 14 List, PROGRESS_CHARS,
15}; 15};
16 16
17const PROGRESS_CHARS: &str = "#>-";
18
19#[derive(Debug, Clone)] 17#[derive(Debug, Clone)]
20pub struct AddMod { 18pub struct AddMod {
21 pub id: IDSelector, 19 pub id: IDSelector,
@@ -40,7 +38,7 @@ pub struct ProjectInfo {
40} 38}
41 39
42pub async fn mod_add( 40pub async fn mod_add(
43 config: Cfg, 41 config: &Cfg,
44 mods: Vec<AddMod>, 42 mods: Vec<AddMod>,
45 list: List, 43 list: List,
46 direct_download: bool, 44 direct_download: bool,
@@ -74,11 +72,11 @@ pub async fn mod_add(
74 info_p.set_style(bar_style.clone()); 72 info_p.set_style(bar_style.clone());
75 let mut projectinfo: Vec<ProjectInfo> = Vec::new(); 73 let mut projectinfo: Vec<ProjectInfo> = Vec::new();
76 if !mod_ids.is_empty() { 74 if !mod_ids.is_empty() {
77 projectinfo.append(&mut get_mod_infos(config.clone(), mod_ids, list.clone()).await?); 75 projectinfo.append(&mut get_mod_infos(config, mod_ids, list.clone()).await?);
78 info_p.inc(1); 76 info_p.inc(1);
79 }; 77 };
80 if !ver_ids.is_empty() { 78 if !ver_ids.is_empty() {
81 projectinfo.append(&mut get_ver_info(config.clone(), ver_ids).await?); 79 projectinfo.append(&mut get_ver_info(config, ver_ids).await?);
82 info_p.inc(1); 80 info_p.inc(1);
83 }; 81 };
84 82
@@ -105,7 +103,7 @@ pub async fn mod_add(
105 }; 103 };
106 104
107 match userlist_insert( 105 match userlist_insert(
108 config.clone(), 106 config,
109 &list.id, 107 &list.id,
110 &project.mod_id, 108 &project.mod_id,
111 &current_version_id, 109 &current_version_id,
@@ -128,7 +126,7 @@ pub async fn mod_add(
128 }?; 126 }?;
129 127
130 match mods_insert( 128 match mods_insert(
131 config.clone(), 129 config,
132 &project.mod_id, 130 &project.mod_id,
133 &project.slug, 131 &project.slug,
134 &project.title, 132 &project.title,
@@ -161,7 +159,7 @@ pub async fn mod_add(
161 Ok(()) 159 Ok(())
162} 160}
163 161
164async fn get_mod_infos(config: Cfg, mod_ids: Vec<(String, bool)>, list: List) -> MLE<Vec<ProjectInfo>> { 162async fn get_mod_infos(config: &Cfg, mod_ids: Vec<(String, bool)>, list: List) -> MLE<Vec<ProjectInfo>> {
165 163
166 let mut setmap: HashMap<String, bool> = HashMap::new(); 164 let mut setmap: HashMap<String, bool> = HashMap::new();
167 165
@@ -255,7 +253,7 @@ async fn get_mod_infos(config: Cfg, mod_ids: Vec<(String, bool)>, list: List) ->
255 Ok(projectinfo) 253 Ok(projectinfo)
256} 254}
257 255
258async fn get_ver_info(config: Cfg, ver_ids: Vec<(String, bool)>) -> MLE<Vec<ProjectInfo>> { 256async fn get_ver_info(config: &Cfg, ver_ids: Vec<(String, bool)>) -> MLE<Vec<ProjectInfo>> {
259 257
260 let mut setmap: HashMap<String, bool> = HashMap::new(); 258 let mut setmap: HashMap<String, bool> = HashMap::new();
261 259
@@ -306,16 +304,16 @@ async fn get_ver_info(config: Cfg, ver_ids: Vec<(String, bool)>) -> MLE<Vec<Proj
306/// * `config` - config struct 304/// * `config` - config struct
307/// * `id` - name, slug or id of the mod 305/// * `id` - name, slug or id of the mod
308/// * `list` - List struct 306/// * `list` - List struct
309pub fn mod_remove(config: Cfg, id: &str, list: List) -> MLE<()> { 307pub fn mod_remove(config: &Cfg, id: &str, list: List) -> MLE<()> {
310 let mod_id = mods_get_id(&config.data, id)?; 308 let mod_id = mods_get_id(&config.data, id)?;
311 309
312 println!("Remove mod {} from {}", mods_get_info(&config, &mod_id)?.title, list.id); 310 println!("Remove mod {} from {}", mods_get_info(config, &mod_id)?.title, list.id);
313 let version = userlist_get_current_version(config.clone(), &list.id, &mod_id)?; 311 let version = userlist_get_current_version(config, &list.id, &mod_id)?;
314 312
315 print!(" └Remove from list"); 313 print!(" └Remove from list");
316 //Force flush of stdout, else print! doesn't print instantly 314 //Force flush of stdout, else print! doesn't print instantly
317 std::io::stdout().flush()?; 315 std::io::stdout().flush()?;
318 userlist_remove(config.clone(), &list.id, &mod_id)?; 316 userlist_remove(config, &list.id, &mod_id)?;
319 println!(" ✓"); 317 println!(" ✓");
320 318
321 print!(" └Delete file"); 319 print!(" └Delete file");
@@ -334,12 +332,12 @@ pub fn mod_remove(config: Cfg, id: &str, list: List) -> MLE<()> {
334 print!(" └Clean main db table"); 332 print!(" └Clean main db table");
335 //Force flush of stdout, else print! doesn't print instantly 333 //Force flush of stdout, else print! doesn't print instantly
336 std::io::stdout().flush()?; 334 std::io::stdout().flush()?;
337 let list_ids = lists_get_all_ids(config.clone())?; 335 let list_ids = lists_get_all_ids(config)?;
338 336
339 // Remove mod from main list if not used elsewhere 337 // Remove mod from main list if not used elsewhere
340 let mut mod_used = false; 338 let mut mod_used = false;
341 for id in list_ids { 339 for id in list_ids {
342 let mods = match userlist_get_all_ids(config.clone(), &id) { 340 let mods = match userlist_get_all_ids(config, &id) {
343 Ok(m) => m, 341 Ok(m) => m,
344 Err(err) => { 342 Err(err) => {
345 if err.to_string() == "Database: NO_MODS_USERLIST" { 343 if err.to_string() == "Database: NO_MODS_USERLIST" {
diff --git a/src/commands/update.rs b/src/commands/update.rs
index 2de13f3..7482e43 100644
--- a/src/commands/update.rs
+++ b/src/commands/update.rs
@@ -9,13 +9,11 @@ use crate::{
9 error::{ErrorType, MLError, MLE}, 9 error::{ErrorType, MLError, MLE},
10 files::{clean_list_dir, delete_version, disable_version, download_versions}, 10 files::{clean_list_dir, delete_version, disable_version, download_versions},
11 modrinth::{extract_current_version, versions, Version}, 11 modrinth::{extract_current_version, versions, Version},
12 List, 12 List, PROGRESS_CHARS,
13}; 13};
14 14
15const PROGRESS_CHARS: &str = "#>-";
16
17pub async fn update( 15pub async fn update(
18 config: Cfg, 16 config: &Cfg,
19 liststack: Vec<List>, 17 liststack: Vec<List>,
20 clean: bool, 18 clean: bool,
21 direct_download: bool, 19 direct_download: bool,
@@ -33,7 +31,7 @@ pub async fn update(
33 for current_list in liststack { 31 for current_list in liststack {
34 32
35 // println!("Update mods in {}", current_list.id); 33 // println!("Update mods in {}", current_list.id);
36 let mods = userlist_get_all_ids(config.clone(), &current_list.id)?; 34 let mods = userlist_get_all_ids(config, &current_list.id)?;
37 35
38 let list_p = mp.insert_before(&update_p, ProgressBar::new(mods.len().try_into().unwrap())); 36 let list_p = mp.insert_before(&update_p, ProgressBar::new(mods.len().try_into().unwrap()));
39 list_p.set_style(bar_style.clone()); 37 list_p.set_style(bar_style.clone());
@@ -47,11 +45,11 @@ pub async fn update(
47 let mod_p = mp.insert_before(&list_p, ProgressBar::new(1)); 45 let mod_p = mp.insert_before(&list_p, ProgressBar::new(1));
48 mod_p.set_style(spinner_style.clone()); 46 mod_p.set_style(spinner_style.clone());
49 47
50 let info = mods_get_info(&config, &id)?; 48 let info = mods_get_info(config, &id)?;
51 mod_p.set_message(format!("Update {}", info.title)); 49 mod_p.set_message(format!("Update {}", info.title));
52 // println!(" ├{}", info.title); 50 // println!(" ├{}", info.title);
53 51
54 if userlist_get_set_version(config.clone(), &current_list.id, &id)? { 52 if userlist_get_set_version(config, &current_list.id, &id)? {
55 // println!(" │ └Set version, skipping update"); 53 // println!(" │ └Set version, skipping update");
56 list_p.inc(1); 54 list_p.inc(1);
57 continue; 55 continue;
@@ -59,16 +57,16 @@ pub async fn update(
59 57
60 //Getting current installed version for disable or delete 58 //Getting current installed version for disable or delete
61 let disable_version = 59 let disable_version =
62 userlist_get_current_version(config.clone(), &current_list.id, &id)?; 60 userlist_get_current_version(config, &current_list.id, &id)?;
63 61
64 mod_p.inc(1); 62 mod_p.inc(1);
65 63
66 updatestack.push( 64 updatestack.push(
67 match specific_update( 65 match specific_update(
68 config.clone(), 66 config,
69 clean, 67 clean,
70 current_list.clone(), 68 current_list.clone(),
71 String::from(&id), 69 &id,
72 &mod_p 70 &mod_p
73 ) 71 )
74 .await 72 .await
@@ -112,7 +110,7 @@ pub async fn update(
112 delete_version(current_list.clone(), ver.0)?; 110 delete_version(current_list.clone(), ver.0)?;
113 } else if ver.0 != "NONE" { 111 } else if ver.0 != "NONE" {
114 println!(" └Disable version {}", ver.0); 112 println!(" └Disable version {}", ver.0);
115 disable_version(config.clone(), current_list.clone(), ver.0, ver.1)?; 113 disable_version(config, current_list.clone(), ver.0, ver.1)?;
116 }; 114 };
117 } 115 }
118 } 116 }
@@ -126,9 +124,9 @@ pub async fn update(
126 Ok(()) 124 Ok(())
127} 125}
128 126
129async fn specific_update(config: Cfg, clean: bool, list: List, id: String, progress: &ProgressBar) -> MLE<Version> { 127async fn specific_update(config: &Cfg, clean: bool, list: List, id: &str, progress: &ProgressBar) -> MLE<Version> {
130 let applicable_versions = 128 let applicable_versions =
131 versions(&config.apis.modrinth, String::from(&id), list.clone()).await; 129 versions(&config.apis.modrinth, String::from(id), list.clone()).await;
132 130
133 let mut versions: Vec<String> = vec![]; 131 let mut versions: Vec<String> = vec![];
134 132
@@ -144,9 +142,9 @@ async fn specific_update(config: Cfg, clean: bool, list: List, id: String, progr
144 if clean 142 if clean
145 || (versions.join("|") 143 || (versions.join("|")
146 != userlist_get_applicable_versions( 144 != userlist_get_applicable_versions(
147 config.clone(), 145 config,
148 String::from(&list.id), 146 String::from(&list.id),
149 String::from(&id), 147 String::from(id),
150 )?) 148 )?)
151 { 149 {
152 let current_str = extract_current_version(applicable_versions.clone())?; 150 let current_str = extract_current_version(applicable_versions.clone())?;
@@ -154,7 +152,7 @@ async fn specific_update(config: Cfg, clean: bool, list: List, id: String, progr
154 if clean { 152 if clean {
155 // println!("\t └Add version to downloadstack"); 153 // println!("\t └Add version to downloadstack");
156 } else { 154 } else {
157 progress.println(format!("Found new version for {}", mods_get_info(&config, &id).unwrap().title)); 155 progress.println(format!("Found new version for {}", mods_get_info(config, id).unwrap().title));
158 // println!("\t └Get versions for specified minecraft versions"); 156 // println!("\t └Get versions for specified minecraft versions");
159 // println!("\t └New current version: {}", current_str); 157 // println!("\t └New current version: {}", current_str);
160 }; 158 };
@@ -178,7 +176,7 @@ async fn specific_update(config: Cfg, clean: bool, list: List, id: String, progr
178 } 176 }
179 .url; 177 .url;
180 178
181 userlist_change_versions(config, list.id, current_str, versions.join("|"), link, id)?; 179 userlist_change_versions(config, list.id, current_str, versions.join("|"), link, id.to_string())?;
182 } 180 }
183 181
184 if current.is_empty() { 182 if current.is_empty() {