diff --git a/src/main.rs b/src/main.rs index 77ddf5b..9266866 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,25 @@ -use std::process; - use crate::{ providers::{Provider, github::Github}, tui::user_select_repo, }; use colored::*; use dialoguer::{Select, theme::ColorfulTheme}; +use std::io::Write; +use std::{io, process}; mod providers; mod tui; -pub fn ask_yes_no(message: &str) -> bool { - let options = vec!["Yes", "No"]; +enum DefaultAnswer { + Yes, + No, +} + +fn ask_yes_no(message: &str, default: Option) -> bool { + let options = match default { + Some(DefaultAnswer::Yes) => vec!["Yes", "No"], + Some(DefaultAnswer::No) => vec!["No", "Yes"], + None => vec!["Yes", "No"], + }; let selection = Select::with_theme(&ColorfulTheme::default()) .with_prompt(message.to_string()) @@ -26,6 +35,16 @@ pub fn ask_yes_no(message: &str) -> bool { } } +fn get_input(message: &str) -> String { + print!("{}", message); + io::stdout().flush().unwrap(); + + let mut input = String::new(); + io::stdin().read_line(&mut input).unwrap(); + + input.trim().to_string() +} + #[tokio::main] async fn main() { // Testing to see if github provider works. @@ -43,7 +62,26 @@ async fn main() { } }; - println!("{:#?}", selection); + match ask_yes_no("Clone the repo?", None) { + true => { + let folder: Option = + if ask_yes_no("Use a custom folder?", Some(DefaultAnswer::No)) { + let custom = get_input("Folder name: "); + Some(custom) + } else { + None + }; - println!("{}", ask_yes_no("Clone the repo?")); + match gh.clone(selection, folder, false).await { + Ok(_) => println!("Repo cloned!"), + Err(_) => { + println!("{}", "Error cloning repo.".red()) + } + } + } + false => { + println!("Exiting..."); + process::exit(0); + } + } }