aboutsummaryrefslogtreecommitdiffstats
path: root/src/cli.rs
diff options
context:
space:
mode:
authorsalmonik <raisersoft@proton.me>2026-06-06 19:48:22 +0300
committersalmonik <raisersoft@proton.me>2026-06-06 19:48:22 +0300
commitd347d89dfeef54d648ffdea054897617c0016509 (patch)
tree0ea0e25e2a8e9bcdd8c06ffadbe29721a7f07f77 /src/cli.rs
parentdirty, broken commit (diff)
downloadrsplayer-d347d89dfeef54d648ffdea054897617c0016509.tar.gz
rsplayer-d347d89dfeef54d648ffdea054897617c0016509.zip
correctly working auto completion for db
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs43
1 files changed, 24 insertions, 19 deletions
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 {
95 #[clap(hide = true)] 95 #[clap(hide = true)]
96 /// Complete artists, albums, or tracks from database 96 /// Complete artists, albums, or tracks from database
97 DbComplete { 97 DbComplete {
98 /// Entity type: artists, albums, or tracks 98 /// Query string (e.g. \"J\", \"Artist/\", \"Artist/Album/\")
99 #[arg(value_name = "ENTITY")] 99 #[arg(value_name = "QUERY")]
100 entity: String, 100 query: String,
101 /// Optional prefix to match
102 #[arg(value_name = "PREFIX")]
103 prefix: Option<String>,
104 }, 101 },
105} 102}
106 103
@@ -245,7 +242,23 @@ impl Cli {
245 } 242 }
246 } 243 }
247 } 244 }
248 Commands::DbComplete { entity, prefix } => { 245 Commands::DbComplete { query } => {
246 // Unescape shell escapes in the input query
247 let query = {
248 let mut unescaped = String::with_capacity(query.len());
249 let mut chars = query.chars();
250 while let Some(c) = chars.next() {
251 if c == '\\' {
252 if let Some(next) = chars.next() {
253 unescaped.push(next);
254 }
255 } else {
256 unescaped.push(c);
257 }
258 }
259 unescaped
260 };
261
249 let config = match Config::load() { 262 let config = match Config::load() {
250 Ok(c) => c, 263 Ok(c) => c,
251 Err(_) => return Ok(()), 264 Err(_) => return Ok(()),
@@ -254,19 +267,11 @@ impl Cli {
254 Ok(d) => d, 267 Ok(d) => d,
255 Err(_) => return Ok(()), 268 Err(_) => return Ok(()),
256 }; 269 };
257 let prefix = prefix.as_deref().unwrap_or(""); 270
258 let results: Vec<String> = match entity.as_str() { 271 let results = db.complete(&query).unwrap_or_default();
259 "artists" => db.complete_artists(prefix).unwrap_or_default(), 272
260 "albums" => db.complete_albums(prefix).unwrap_or_default(),
261 "tracks" => db.complete_tracks(prefix).unwrap_or_default(),
262 _ => Vec::new(),
263 };
264 let suffix = match entity.as_str() {
265 "artists" | "albums" => "/",
266 _ => "",
267 };
268 for r in &results { 273 for r in &results {
269 println!("{r}{suffix}"); 274 println!("{r}");
270 } 275 }
271 } 276 }
272 Commands::Completions { shell } => { 277 Commands::Completions { shell } => {