list all or by category and optionally open
This commit is contained in:
		
							parent
							
								
									a1f2acfe70
								
							
						
					
					
						commit
						8f57d4fe26
					
				@ -37,8 +37,7 @@ pub fn make_app() -> App<'static, 'static> {
 | 
				
			|||||||
            SubCommand::with_name("list")
 | 
					            SubCommand::with_name("list")
 | 
				
			||||||
                .alias("l")
 | 
					                .alias("l")
 | 
				
			||||||
                .alias("ls")
 | 
					                .alias("ls")
 | 
				
			||||||
                .about("List all notes or one note")
 | 
					                .about("List all notes or notes from a category")
 | 
				
			||||||
                .arg(Arg::with_name("header").help("Name of the note."))
 | 
					 | 
				
			||||||
                .arg(
 | 
					                .arg(
 | 
				
			||||||
                    Arg::with_name("category")
 | 
					                    Arg::with_name("category")
 | 
				
			||||||
                        .help("List all notes from a category.")
 | 
					                        .help("List all notes from a category.")
 | 
				
			||||||
 | 
				
			|||||||
@ -224,3 +224,64 @@ pub fn show_category(category: &str) -> Result<()> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn list_all() -> Result<()> {
 | 
				
			||||||
 | 
					    let path = get_base_path()?;
 | 
				
			||||||
 | 
					    let mut files: Vec<String> = Vec::new();
 | 
				
			||||||
 | 
					    for (_, file) in WalkDir::new(path)
 | 
				
			||||||
 | 
					        .into_iter()
 | 
				
			||||||
 | 
					        .filter_map(|file| file.ok())
 | 
				
			||||||
 | 
					        .enumerate()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if file.metadata()?.is_file() {
 | 
				
			||||||
 | 
					            let p = file.path().to_str().unwrap_or("");
 | 
				
			||||||
 | 
					            if !p.is_empty() {
 | 
				
			||||||
 | 
					                files.push(p.to_owned());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    let selection = Select::with_theme(&ColorfulTheme::default())
 | 
				
			||||||
 | 
					        .with_prompt("Optionally choose a note")
 | 
				
			||||||
 | 
					        .default(0)
 | 
				
			||||||
 | 
					        .items(&files)
 | 
				
			||||||
 | 
					        .interact_opt()?;
 | 
				
			||||||
 | 
					    if let Some(selection) = selection {
 | 
				
			||||||
 | 
					        let editor = std::env::var("EDITOR")?;
 | 
				
			||||||
 | 
					        std::process::Command::new(editor)
 | 
				
			||||||
 | 
					            .arg(files.remove(selection))
 | 
				
			||||||
 | 
					            .status()?;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn list_category(category: &str) -> Result<()> {
 | 
				
			||||||
 | 
					    let base = get_base_path()?;
 | 
				
			||||||
 | 
					    let path = format!("{}{}", base, category);
 | 
				
			||||||
 | 
					    let mut files: Vec<String> = Vec::new();
 | 
				
			||||||
 | 
					    if std::path::Path::new(&path).exists() {
 | 
				
			||||||
 | 
					        for (_, file) in WalkDir::new(path)
 | 
				
			||||||
 | 
					            .into_iter()
 | 
				
			||||||
 | 
					            .filter_map(|file| file.ok())
 | 
				
			||||||
 | 
					            .enumerate()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if file.metadata()?.is_file() {
 | 
				
			||||||
 | 
					                let p = file.path().to_str().unwrap_or("");
 | 
				
			||||||
 | 
					                if !p.is_empty() {
 | 
				
			||||||
 | 
					                    files.push(p.to_owned());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        let selection = Select::with_theme(&ColorfulTheme::default())
 | 
				
			||||||
 | 
					            .with_prompt("Optionally choose a note")
 | 
				
			||||||
 | 
					            .default(0)
 | 
				
			||||||
 | 
					            .items(&files)
 | 
				
			||||||
 | 
					            .interact_opt()?;
 | 
				
			||||||
 | 
					        if let Some(selection) = selection {
 | 
				
			||||||
 | 
					            let editor = std::env::var("EDITOR")?;
 | 
				
			||||||
 | 
					            std::process::Command::new(editor)
 | 
				
			||||||
 | 
					                .arg(files.remove(selection))
 | 
				
			||||||
 | 
					                .status()?;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -40,7 +40,16 @@ pub fn edit(matches: &ArgMatches) -> Result<()> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn list(matches: &ArgMatches) -> Result<()> {
 | 
					pub fn list(matches: &ArgMatches) -> Result<()> {
 | 
				
			||||||
    unimplemented!("list all notes, one note or category {:?}", matches);
 | 
					    match matches.is_present("category") {
 | 
				
			||||||
 | 
					        true => {
 | 
				
			||||||
 | 
					            let s: String = Input::with_theme(&ColorfulTheme::default())
 | 
				
			||||||
 | 
					                .with_prompt("Category:")
 | 
				
			||||||
 | 
					                .interact_text()?;
 | 
				
			||||||
 | 
					            notes::list_category(&s)?;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        false => notes::list_all()?,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn search(matches: &ArgMatches) -> Result<()> {
 | 
					pub fn search(matches: &ArgMatches) -> Result<()> {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user