diff --git a/frigate/api/classification.py b/frigate/api/classification.py index 1694b41c1..562ea6d64 100644 --- a/frigate/api/classification.py +++ b/frigate/api/classification.py @@ -110,6 +110,7 @@ def deregister_faces(request: Request, name: str, body: dict = None): json: dict[str, any] = body or {} list_of_ids = json.get("ids", []) + delete_directory = json.get("delete_directory", False) # New flag for directory deletion if not list_of_ids: return JSONResponse( @@ -125,18 +126,18 @@ def deregister_faces(request: Request, name: str, body: dict = None): content={"message": f"Face '{name}' not found", "success": False}, ) - context: EmbeddingsContext = request.app.embeddings - context.delete_face_ids( - name, map(lambda file: sanitize_filename(file), list_of_ids) - ) - try: - if os.path.exists(face_dir): + if delete_directory: shutil.rmtree(face_dir) + else: + context: EmbeddingsContext = request.app.embeddings + context.delete_face_ids( + name, map(lambda file: sanitize_filename(file), list_of_ids) + ) except Exception as e: - logger.error(f"Failed to remove directory {face_dir}: {str(e)}") + logger.error(f"Failed to delete face: {str(e)}") return JSONResponse( - content={"success": False, "message": f"Failed to remove directory: {str(e)}"}, + content={"success": False, "message": f"Failed to delete face: {str(e)}"}, status_code=500, ) diff --git a/web/src/pages/FaceLibrary.tsx b/web/src/pages/FaceLibrary.tsx index 92c684764..b95ed012d 100644 --- a/web/src/pages/FaceLibrary.tsx +++ b/web/src/pages/FaceLibrary.tsx @@ -169,6 +169,7 @@ export default function FaceLibrary() { }); setRenameDialog(false); + setPageToggle(renameData.newName); setRenameData({ oldName: '', newName: '' }); await refreshFaces(); toast.success("Successfully renamed face", { position: "top-center" }); @@ -181,13 +182,14 @@ export default function FaceLibrary() { } finally { setIsRenaming(false); } - }, [renameData, refreshFaces]); + }, [renameData, refreshFaces, setPageToggle]); const deleteFace = useCallback(async () => { try { const images = faceData[renameData.oldName] || []; await axios.post(`/faces/${renameData.oldName}/delete`, { - ids: images.length ? images : ['dummy'] + ids: images.length ? images : ['dummy'], + delete_directory: true }); setRenameDialog(false);