From d347d89dfeef54d648ffdea054897617c0016509 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 6 Jun 2026 19:48:22 +0300 Subject: correctly working auto completion for db --- src/cli.rs | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index 5a53eeb..e4bb484 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -95,12 +95,9 @@ pub enum Commands { #[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, + /// Query string (e.g. \"J\", \"Artist/\", \"Artist/Album/\") + #[arg(value_name = "QUERY")] + query: String, }, } @@ -245,7 +242,23 @@ impl Cli { } } } - Commands::DbComplete { entity, prefix } => { + Commands::DbComplete { query } => { + // Unescape shell escapes in the input query + let query = { + let mut unescaped = String::with_capacity(query.len()); + let mut chars = query.chars(); + while let Some(c) = chars.next() { + if c == '\\' { + if let Some(next) = chars.next() { + unescaped.push(next); + } + } else { + unescaped.push(c); + } + } + unescaped + }; + let config = match Config::load() { Ok(c) => c, Err(_) => return Ok(()), @@ -254,19 +267,11 @@ impl Cli { 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" => "/", - _ => "", - }; + + let results = db.complete(&query).unwrap_or_default(); + for r in &results { - println!("{r}{suffix}"); + println!("{r}"); } } Commands::Completions { shell } => { -- cgit v1.2.3