From 1e48765ab39a679abcc4eac6927ad3bb58f7b438 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 4 Jun 2026 00:21:46 +0200 Subject: dirty, broken commit --- src/cli.rs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index f5fdd2c..5a53eeb 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -92,6 +92,16 @@ pub enum Commands { #[arg(value_name = "SHELL")] shell: Option, }, + #[clap(hide = true)] + /// Complete artists, albums, or tracks from database + DbComplete { + /// Entity type: artists, albums, or tracks + #[arg(value_name = "ENTITY")] + entity: String, + /// Optional prefix to match + #[arg(value_name = "PREFIX")] + prefix: Option, + }, } #[derive(Subcommand)] @@ -235,11 +245,35 @@ impl Cli { } } } + Commands::DbComplete { entity, prefix } => { + let config = match Config::load() { + Ok(c) => c, + Err(_) => return Ok(()), + }; + let db = match Database::open(&config) { + Ok(d) => d, + Err(_) => return Ok(()), + }; + let prefix = prefix.as_deref().unwrap_or(""); + let results: Vec = match entity.as_str() { + "artists" => db.complete_artists(prefix).unwrap_or_default(), + "albums" => db.complete_albums(prefix).unwrap_or_default(), + "tracks" => db.complete_tracks(prefix).unwrap_or_default(), + _ => Vec::new(), + }; + let suffix = match entity.as_str() { + "artists" | "albums" => "/", + _ => "", + }; + for r in &results { + println!("{r}{suffix}"); + } + } Commands::Completions { shell } => { let full = Cli::command(); let subcommands: Vec = full .get_subcommands() - .filter(|s| s.get_name() != "completions") + .filter(|s| s.get_name() != "completions" && s.get_name() != "db-complete") .cloned() .collect(); let cmd_name = full.get_name().to_string(); -- cgit v1.2.3