Add defensible orphaned audio detection
This commit is contained in:
+37
-5
@@ -143,10 +143,24 @@ def diagnostic_details(library: Library, limit: int = DETAIL_LIMIT) -> dict:
|
||||
database_filename_counts = Counter(
|
||||
normalize(track.filename) for track in missing_database_tracks
|
||||
)
|
||||
referenced_names = {reference.filename for reference in library.references}
|
||||
referenced_names = {
|
||||
normalize(reference.filename) for reference in library.references
|
||||
}
|
||||
database_names = {normalize(track.filename) for track in database_tracks}
|
||||
unused_tracks = [
|
||||
track for track in library.tracks if track.filename not in referenced_names
|
||||
track
|
||||
for track in library.tracks
|
||||
if normalize(track.filename) not in referenced_names
|
||||
]
|
||||
orphan_candidates = (
|
||||
[
|
||||
track
|
||||
for track in unused_tracks
|
||||
if normalize(track.filename) not in database_names
|
||||
]
|
||||
if library.database
|
||||
else None
|
||||
)
|
||||
|
||||
return {
|
||||
"database_missing_tracks": {
|
||||
@@ -246,10 +260,10 @@ def diagnostic_details(library: Library, limit: int = DETAIL_LIMIT) -> dict:
|
||||
],
|
||||
},
|
||||
"unused_tracks": {
|
||||
"title": "Unused tracks",
|
||||
"title": "Not in crates",
|
||||
"summary": (
|
||||
"These scanned files were not referenced by any loaded crate. "
|
||||
"That does not mean they should be deleted."
|
||||
"These files are not in any loaded crate, but may still be "
|
||||
"normal tracks in Serato's main library."
|
||||
),
|
||||
"total": len(unused_tracks),
|
||||
"items": [
|
||||
@@ -257,6 +271,24 @@ def diagnostic_details(library: Library, limit: int = DETAIL_LIMIT) -> dict:
|
||||
for track in unused_tracks[:limit]
|
||||
],
|
||||
},
|
||||
"orphan_candidates": {
|
||||
"title": "Possible orphan files",
|
||||
"summary": (
|
||||
"These files were found in the music folder but not by filename "
|
||||
"in loaded crates or Serato's database. Review only; this is "
|
||||
"never an automatic deletion recommendation."
|
||||
),
|
||||
"total": len(orphan_candidates) if orphan_candidates is not None else None,
|
||||
"assessed": orphan_candidates is not None,
|
||||
"items": [
|
||||
{
|
||||
"filename": track.filename,
|
||||
"path": _display_path(track.path),
|
||||
**_file_preview(track.path),
|
||||
}
|
||||
for track in (orphan_candidates or ())[:limit]
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user