diff --git a/src/main.rs b/src/main.rs index eb588f3..e7b88d0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -343,6 +343,27 @@ fn replace() -> BoxResult<()>{ } Ok(()) } + +enum UploadAction { + Upload(u64), + Skip, +} +struct ParseUploadActionErr; +impl std::str::FromStr for UploadAction { + type Err=ParseUploadActionErr; + fn from_str(s: &str) -> Result{ + if s=="skip\n"{ + Ok(Self::Skip) + }else{ + if let Ok(asset_id)=s[..s.len()-1].parse::(){ + Ok(Self::Upload(asset_id)) + }else{ + Err(ParseUploadActionErr) + } + } + } +} + fn upload() -> BoxResult<()>{ //interactive prompt per upload: for entry in std::fs::read_dir("maps/passed")? { @@ -357,26 +378,39 @@ fn upload() -> BoxResult<()>{ //id: ["New" for blank because of my double enter key] print!("Model name: {}\nCreator: {}\nDisplayName: {}\nAsset Id: ",modelname,creator,displayname); std::io::Write::flush(&mut std::io::stdout())?; - let asset_id; + let upload_action; loop{ - let mut asset_id_string = String::new(); - std::io::stdin().read_line(&mut asset_id_string)?; - asset_id_string.pop();//drop newline - if let Ok(parsed_asset_id)=asset_id_string.parse::(){ - asset_id=parsed_asset_id; + let mut upload_action_string = String::new(); + std::io::stdin().read_line(&mut upload_action_string)?; + if let Ok(parsed_upload_action)=upload_action_string.parse::(){ + upload_action=parsed_upload_action; break; }else{ print!("Asset Id: "); std::io::Write::flush(&mut std::io::stdout())?; } } - - std::process::Command::new("../rbxcompiler-linux-amd64") - .arg("--compile=false") - .arg("--group=6980477") - .arg(format!("--asset={}",asset_id)) - .arg(format!("--input={}",file_thing.path().into_os_string().into_string().unwrap())) - .spawn()?; + match upload_action { + UploadAction::Upload(asset_id) => { + let status=std::process::Command::new("../rbxcompiler-linux-amd64") + .arg("--compile=false") + .arg("--group=6980477") + .arg(format!("--asset={}",asset_id)) + .arg(format!("--input={}",file_thing.path().into_os_string().into_string().unwrap())) + .status()?; + match status.code() { + Some(0)=>{ + //move file + let mut dest=std::path::PathBuf::from("maps/uploaded"); + dest.push(file_thing.file_name()); + std::fs::rename(file_thing.path(), dest)?; + } + Some(code)=>println!("upload failed! code={}",code), + None => println!("no status code!"), + } + } + UploadAction::Skip => continue, + } } Ok(()) }