summaryrefslogtreecommitdiff
path: root/src/commands/modification.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/modification.rs')
-rw-r--r--src/commands/modification.rs31
1 files changed, 9 insertions, 22 deletions
diff --git a/src/commands/modification.rs b/src/commands/modification.rs
index 595b677..519a0cb 100644
--- a/src/commands/modification.rs
+++ b/src/commands/modification.rs
@@ -1,23 +1,17 @@
1use std::io::{Error, ErrorKind}; 1use std::io::{Error, ErrorKind};
2 2
3use 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, get_current_list}; 3use 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};
4 4
5pub async fn modification(config: Cfg, args: Option<Vec<String>>) -> Result<(), Box<dyn std::error::Error>> { 5pub async fn modification(config: Cfg, input: Input) -> Result<(), Box<dyn std::error::Error>> {
6 6
7 if args.is_none() { return Err(Box::new(Error::new(ErrorKind::InvalidInput, "TOO_FEW_ARGUMENTS"))) } 7 match input.subcommand.ok_or("")? {
8 8 Subcmd::Add => {
9 let arguments = Input::from(args.unwrap().join(" "))?; 9 add(config, input.args.ok_or("")?).await
10
11 if arguments.args.is_none() { return Err(Box::new(Error::new(ErrorKind::InvalidInput, "TOO_FEW_ARGUMENTS"))); };
12
13 match arguments.command.as_str() {
14 "add" => {
15 add(config, arguments.args.unwrap()).await
16 }, 10 },
17 "remove" => { 11 Subcmd::Remove => {
18 remove(config, arguments.args.unwrap()) 12 remove(config, input.args.ok_or("")?)
19 }, 13 },
20 _ => Err(Box::new(Error::new(ErrorKind::InvalidInput, "UNKNOWN_SUBCOMMAND"))) 14 _ => Err(Box::new(Error::new(ErrorKind::InvalidInput, "SUBCOMMAND_NOT_AVAILABLE")))
21 } 15 }
22} 16}
23 17
@@ -29,8 +23,6 @@ async fn add(config: Cfg, args: Vec<String>) -> Result<(), Box<dyn std::error::E
29 23
30 let project = project(String::from(&config.apis.modrinth), &args[0]).await; 24 let project = project(String::from(&config.apis.modrinth), &args[0]).await;
31 25
32 dbg!(&project);
33
34 if project.versions.is_empty() { panic!("This should never happen"); }; 26 if project.versions.is_empty() { panic!("This should never happen"); };
35 27
36 let available_versions = versions(String::from(&config.apis.modrinth), String::from(&project.id), current_list.clone()).await; 28 let available_versions = versions(String::from(&config.apis.modrinth), String::from(&project.id), current_list.clone()).await;
@@ -48,7 +40,6 @@ async fn add(config: Cfg, args: Vec<String>) -> Result<(), Box<dyn std::error::E
48 //add to current list and mod table 40 //add to current list and mod table
49 match userlist_get_all_ids(config.clone(), current_list.clone().id) { 41 match userlist_get_all_ids(config.clone(), current_list.clone().id) {
50 Ok(mods) => { 42 Ok(mods) => {
51 dbg!(&mods);
52 if mods.contains(&project.id) { 43 if mods.contains(&project.id) {
53 return Err(Box::new(Error::new(ErrorKind::Other, "MOD_ALREADY_ON_LIST"))); } 44 return Err(Box::new(Error::new(ErrorKind::Other, "MOD_ALREADY_ON_LIST"))); }
54 else { 45 else {
@@ -60,7 +51,6 @@ async fn add(config: Cfg, args: Vec<String>) -> Result<(), Box<dyn std::error::E
60 51
61 match mods_get_all_ids(config.clone()) { 52 match mods_get_all_ids(config.clone()) {
62 Ok(mods) => { 53 Ok(mods) => {
63 dbg!(&mods);
64 if mods.contains(&project.id) { 54 if mods.contains(&project.id) {
65 return Err(Box::new(Error::new(ErrorKind::Other, "MOD_ALREADY_IN_DATABASE"))) 55 return Err(Box::new(Error::new(ErrorKind::Other, "MOD_ALREADY_IN_DATABASE")))
66 } else { 56 } else {
@@ -81,8 +71,5 @@ fn remove(config: Cfg, args: Vec<String>) -> Result<(), Box<dyn std::error::Erro
81 let mod_id = mods_get_id(config.clone(), String::from(&args[0]))?; 71 let mod_id = mods_get_id(config.clone(), String::from(&args[0]))?;
82 72
83 //TODO implement remove from modlist if not in any other lists && config clean is true 73 //TODO implement remove from modlist if not in any other lists && config clean is true
84 match userlist_remove(config, current_list.id, mod_id) { 74 userlist_remove(config, current_list.id, mod_id)
85 Err(..) => { Err(Box::new(Error::new(ErrorKind::Other, "TBD"))) },
86 Ok(()) => Ok(()),
87 }
88} 75}