From 00d4e8d3e0b5ce0fc16def5e3595b20c1081569e Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Wed, 25 Mar 2026 14:32:17 -0400 Subject: [PATCH] proper fix plus delete artist actually removes files --- src/routes/artists.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/routes/artists.rs b/src/routes/artists.rs index 8e71108..c011f81 100644 --- a/src/routes/artists.rs +++ b/src/routes/artists.rs @@ -840,13 +840,28 @@ async fn delete_artist( let id = path.into_inner(); let conn = state.db.conn(); - // Cascade: remove wanted items, tracks (DB only), albums, cache, then artist + // Get tracks before deleting so we can remove files from disk + let tracks = queries::tracks::get_by_artist(conn, id).await?; + let library_path = state.config.read().await.library_path.clone(); + + // Cascade: remove wanted items, tracks, albums, cache, then artist queries::wanted::remove_by_artist(conn, id).await?; queries::tracks::delete_by_artist(conn, id).await?; queries::albums::delete_by_artist(conn, id).await?; let _ = queries::cache::purge_prefix(conn, &format!("artist_totals:{id}")).await; queries::artists::delete(conn, id).await?; + // Delete files from disk and clean up empty directories + for track in &tracks { + let path = std::path::Path::new(&track.file_path); + if path.exists() { + let _ = std::fs::remove_file(path); + if let Some(parent) = path.parent() { + shanty_org::cleanup_empty_dirs(parent, &library_path); + } + } + } + Ok(HttpResponse::NoContent().finish()) }