diff options
| author | salmonik <raisersoft@proton.me> | 2026-06-09 13:55:00 +0300 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-06-09 13:55:00 +0300 |
| commit | 192234c950d60da804a0e634a37536b2fe6010f6 (patch) | |
| tree | 3a3a0d4c10be4ed9b35605cf4b1947c7e4a55942 | |
| parent | change lrc lyrics display. (diff) | |
| download | rsplayer-192234c950d60da804a0e634a37536b2fe6010f6.tar.gz rsplayer-192234c950d60da804a0e634a37536b2fe6010f6.zip | |
limit completions to LIMIT
| -rw-r--r-- | src/database.rs | 50 |
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 | ||
| 46 | const LIMIT: usize = 50; | ||
| 47 | |||
| 46 | #[allow(dead_code)] | 48 | #[allow(dead_code)] |
| 47 | impl Database { | 49 | impl 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