aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsalmonik <raisersoft@proton.me>2026-06-09 13:55:00 +0300
committersalmonik <raisersoft@proton.me>2026-06-09 13:55:00 +0300
commit192234c950d60da804a0e634a37536b2fe6010f6 (patch)
tree3a3a0d4c10be4ed9b35605cf4b1947c7e4a55942
parentchange lrc lyrics display. (diff)
downloadrsplayer-192234c950d60da804a0e634a37536b2fe6010f6.tar.gz
rsplayer-192234c950d60da804a0e634a37536b2fe6010f6.zip
limit completions to LIMIT
-rw-r--r--src/database.rs50
1 files changed, 36 insertions, 14 deletions
diff --git a/src/database.rs b/src/database.rs
index e6f6f6e..831a7ba 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -43,6 +43,8 @@ pub struct Database {
43 conn: Connection, 43 conn: Connection,
44} 44}
45 45
46const LIMIT: usize = 50;
47
46#[allow(dead_code)] 48#[allow(dead_code)]
47impl Database { 49impl Database {
48 pub fn conn(&self) -> &Connection { 50 pub fn conn(&self) -> &Connection {
@@ -309,9 +311,9 @@ impl Database {
309 let mut results: Vec<String> = Vec::new(); 311 let mut results: Vec<String> = Vec::new();
310 312
311 if query.is_empty() { 313 if query.is_empty() {
312 let mut stmt = self 314 let mut stmt = self.conn.prepare(
313 .conn 315 &format!("SELECT name FROM artists ORDER BY name LIMIT {}", LIMIT).to_string(),
314 .prepare("SELECT name FROM artists ORDER BY name LIMIT 25")?; 316 )?;
315 let rows = stmt.query_map([], |row| row.get::<_, String>(0))?; 317 let rows = stmt.query_map([], |row| row.get::<_, String>(0))?;
316 for name in rows.flatten() { 318 for name in rows.flatten() {
317 results.push(format!("{name}/")); 319 results.push(format!("{name}/"));
@@ -329,10 +331,14 @@ impl Database {
329 1 => { 331 1 => {
330 let artist = segments[0]; 332 let artist = segments[0];
331 let mut stmt = self.conn.prepare( 333 let mut stmt = self.conn.prepare(
332 "SELECT a.title FROM albums a 334 &format!(
335 "SELECT a.title FROM albums a
333 JOIN artists ar ON a.artist_id = ar.id 336 JOIN artists ar ON a.artist_id = ar.id
334 WHERE ar.name LIKE ?1 337 WHERE ar.name LIKE ?1
335 ORDER BY a.title LIMIT 25", 338 ORDER BY a.title LIMIT {}",
339 LIMIT
340 )
341 .to_string(),
336 )?; 342 )?;
337 let rows = stmt.query_map([artist], |row| row.get::<_, String>(0))?; 343 let rows = stmt.query_map([artist], |row| row.get::<_, String>(0))?;
338 for album in rows.flatten() { 344 for album in rows.flatten() {
@@ -343,11 +349,15 @@ impl Database {
343 let artist = segments[0]; 349 let artist = segments[0];
344 let album = segments[1]; 350 let album = segments[1];
345 let mut stmt = self.conn.prepare( 351 let mut stmt = self.conn.prepare(
346 "SELECT t.title FROM tracks t 352 &format!(
353 "SELECT t.title FROM tracks t
347 JOIN albums a ON t.album_id = a.id 354 JOIN albums a ON t.album_id = a.id
348 JOIN artists ar ON a.artist_id = ar.id 355 JOIN artists ar ON a.artist_id = ar.id
349 WHERE ar.name LIKE ?1 AND a.title LIKE ?2 356 WHERE ar.name LIKE ?1 AND a.title LIKE ?2
350 ORDER BY t.track_number, t.title LIMIT 25", 357 ORDER BY t.track_number, t.title LIMIT {}",
358 LIMIT
359 )
360 .to_string(),
351 )?; 361 )?;
352 let rows = stmt.query_map(rusqlite::params![artist, album], |row| { 362 let rows = stmt.query_map(rusqlite::params![artist, album], |row| {
353 row.get::<_, String>(0) 363 row.get::<_, String>(0)
@@ -368,12 +378,16 @@ impl Database {
368 let prefix_pattern = format!("{prefix}%"); 378 let prefix_pattern = format!("{prefix}%");
369 379
370 let mut stmt = self.conn.prepare( 380 let mut stmt = self.conn.prepare(
371 "SELECT name FROM artists 381 &format!(
382 "SELECT name FROM artists
372 WHERE name LIKE ?1 383 WHERE name LIKE ?1
373 ORDER BY 384 ORDER BY
374 CASE WHEN name LIKE ?2 THEN 0 ELSE 1 END, 385 CASE WHEN name LIKE ?2 THEN 0 ELSE 1 END,
375 name 386 name
376 LIMIT 25", 387 LIMIT {}",
388 LIMIT
389 )
390 .to_string(),
377 )?; 391 )?;
378 let rows = stmt 392 let rows = stmt
379 .query_map(rusqlite::params![&like_pattern, &prefix_pattern], |row| { 393 .query_map(rusqlite::params![&like_pattern, &prefix_pattern], |row| {
@@ -396,14 +410,18 @@ impl Database {
396 let album_prefix_pattern = format!("{album_prefix}%"); 410 let album_prefix_pattern = format!("{album_prefix}%");
397 411
398 let mut stmt = self.conn.prepare( 412 let mut stmt = self.conn.prepare(
399 "SELECT ar.name, a.title FROM albums a 413 &format!(
414 "SELECT ar.name, a.title FROM albums a
400 JOIN artists ar ON a.artist_id = ar.id 415 JOIN artists ar ON a.artist_id = ar.id
401 WHERE ar.name LIKE ?1 AND a.title LIKE ?2 416 WHERE ar.name LIKE ?1 AND a.title LIKE ?2
402 ORDER BY 417 ORDER BY
403 CASE WHEN ar.name LIKE ?3 THEN 0 ELSE 1 END, 418 CASE WHEN ar.name LIKE ?3 THEN 0 ELSE 1 END,
404 CASE WHEN a.title LIKE ?4 THEN 0 ELSE 1 END, 419 CASE WHEN a.title LIKE ?4 THEN 0 ELSE 1 END,
405 ar.name, a.title 420 ar.name, a.title
406 LIMIT 25", 421 LIMIT {}",
422 LIMIT
423 )
424 .to_string(),
407 )?; 425 )?;
408 let rows = stmt.query_map( 426 let rows = stmt.query_map(
409 rusqlite::params![ 427 rusqlite::params![
@@ -434,7 +452,8 @@ impl Database {
434 let track_prefix_pattern = format!("{track_prefix}%"); 452 let track_prefix_pattern = format!("{track_prefix}%");
435 453
436 let mut stmt = self.conn.prepare( 454 let mut stmt = self.conn.prepare(
437 "SELECT ar.name, a.title, t.title FROM tracks t 455 &format!(
456 "SELECT ar.name, a.title, t.title FROM tracks t
438 JOIN albums a ON t.album_id = a.id 457 JOIN albums a ON t.album_id = a.id
439 JOIN artists ar ON a.artist_id = ar.id 458 JOIN artists ar ON a.artist_id = ar.id
440 WHERE ar.name LIKE ?1 AND a.title LIKE ?2 AND t.title LIKE ?3 459 WHERE ar.name LIKE ?1 AND a.title LIKE ?2 AND t.title LIKE ?3
@@ -443,7 +462,10 @@ impl Database {
443 CASE WHEN a.title LIKE ?5 THEN 0 ELSE 1 END, 462 CASE WHEN a.title LIKE ?5 THEN 0 ELSE 1 END,
444 CASE WHEN t.title LIKE ?6 THEN 0 ELSE 1 END, 463 CASE WHEN t.title LIKE ?6 THEN 0 ELSE 1 END,
445 t.track_number, t.title 464 t.track_number, t.title
446 LIMIT 25", 465 LIMIT {}",
466 LIMIT
467 )
468 .to_string(),
447 )?; 469 )?;
448 let rows = stmt.query_map( 470 let rows = stmt.query_map(
449 rusqlite::params![ 471 rusqlite::params![
@@ -470,7 +492,7 @@ impl Database {
470 } 492 }
471 } 493 }
472 494
473 results.truncate(25); 495 results.truncate(LIMIT);
474 496
475 Ok(results) 497 Ok(results)
476 } 498 }