Compare commits

..

1 Commits

Author SHA1 Message Date
Connor Johnstone c425402857 added the cleanup, which was missing. also artist lookup first rather than search on import 2026-03-25 14:04:24 -04:00
+29
View File
@@ -184,6 +184,35 @@ pub async fn delete_by_artist(db: &DatabaseConnection, artist_id: i32) -> DbResu
Ok(result.rows_affected) Ok(result.rows_affected)
} }
/// Get tracks that have been tagged but have no corresponding wanted_item.
/// These are files that went through the pipeline but aren't part of any watched content.
pub async fn get_unwanted(db: &DatabaseConnection) -> DbResult<Vec<Track>> {
let all_tagged = Tracks::find()
.filter(track::Column::Tagged.eq(true))
.all(db)
.await?;
let all_wanted = crate::entities::wanted_item::Entity::find().all(db).await?;
let wanted_mbids: std::collections::HashSet<&str> = all_wanted
.iter()
.filter_map(|w| w.musicbrainz_id.as_deref())
.collect();
let wanted_track_ids: std::collections::HashSet<i32> =
all_wanted.iter().filter_map(|w| w.track_id).collect();
Ok(all_tagged
.into_iter()
.filter(|t| {
// Not linked by track_id
!wanted_track_ids.contains(&t.id)
// Not linked by MBID
&& !t.musicbrainz_id.as_deref().is_some_and(|mbid| wanted_mbids.contains(mbid))
})
.collect())
}
/// Delete tracks whose files no longer exist on disk. /// Delete tracks whose files no longer exist on disk.
pub async fn delete_orphaned(db: &DatabaseConnection) -> DbResult<u64> { pub async fn delete_orphaned(db: &DatabaseConnection) -> DbResult<u64> {
let all = Tracks::find().all(db).await?; let all = Tracks::find().all(db).await?;