Correction de petits bugs d'interface

This commit is contained in:
2026-01-04 18:54:31 +01:00
parent c53ccf2f93
commit 7546072d2b
18 changed files with 4776 additions and 1895 deletions

View File

@@ -37,6 +37,7 @@ impl PersistenceManager {
title TEXT NOT NULL,
role TEXT NOT NULL,
cover_pk TEXT,
artist TEXT,
max_size INTEGER,
default_ttl_secs INTEGER,
created_at INTEGER NOT NULL,
@@ -86,6 +87,7 @@ impl PersistenceManager {
title: &str,
role: &PlaylistRole,
cover_pk: Option<&str>,
artist: Option<&str>,
config: &PlaylistConfig,
tracks: &VecDeque<Arc<Record>>,
) -> Result<()> {
@@ -98,15 +100,16 @@ impl PersistenceManager {
// Upsert playlist metadata
conn.execute(
"INSERT OR REPLACE INTO playlists (id, title, role, cover_pk, max_size, default_ttl_secs, created_at, last_modified)
VALUES (?1, ?2, ?3, ?4, ?5, ?6,
COALESCE((SELECT created_at FROM playlists WHERE id = ?1), ?7),
?7)",
"INSERT OR REPLACE INTO playlists (id, title, role, cover_pk, artist, max_size, default_ttl_secs, created_at, last_modified)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7,
COALESCE((SELECT created_at FROM playlists WHERE id = ?1), ?8),
?8)",
params![
id,
title,
role.as_str(),
cover_pk,
artist,
config.max_size.map(|s| s as i64),
config.default_ttl.map(|d| d.as_secs() as i64),
now_nanos,
@@ -150,6 +153,7 @@ impl PersistenceManager {
PlaylistRole,
PlaylistConfig,
Option<String>,
Option<String>,
VecDeque<Arc<Record>>,
)>,
> {
@@ -157,7 +161,7 @@ impl PersistenceManager {
// Charger les métadonnées
let mut stmt = conn.prepare(
"SELECT title, role, cover_pk, max_size, default_ttl_secs FROM playlists WHERE id = ?1",
"SELECT title, role, cover_pk, artist, max_size, default_ttl_secs FROM playlists WHERE id = ?1",
)
.map_err(|e| {
crate::Error::PersistenceError(format!("Failed to prepare statement: {}", e))
@@ -167,8 +171,9 @@ impl PersistenceManager {
let title: String = row.get(0)?;
let role_raw: String = row.get(1)?;
let cover_pk: Option<String> = row.get(2)?;
let max_size: Option<i64> = row.get(3)?;
let default_ttl_secs: Option<i64> = row.get(4)?;
let artist: Option<String> = row.get(3)?;
let max_size: Option<i64> = row.get(4)?;
let default_ttl_secs: Option<i64> = row.get(5)?;
Ok((
title,
@@ -179,10 +184,11 @@ impl PersistenceManager {
default_ttl: default_ttl_secs.map(|s| Duration::from_secs(s as u64)),
},
cover_pk,
artist,
))
});
let (title, role, config, cover_pk) = match result {
let (title, role, config, cover_pk, artist) = match result {
Ok(data) => data,
Err(rusqlite::Error::QueryReturnedNoRows) => return Ok(None),
Err(e) => {
@@ -225,7 +231,7 @@ impl PersistenceManager {
tracks.push_back(Arc::new(record));
}
Ok(Some((title, role, config, cover_pk, tracks)))
Ok(Some((title, role, config, cover_pk, artist, tracks)))
}
/// Supprime une playlist