diff --git a/frigate/api/export.py b/frigate/api/export.py index c88e0146a..a3db5bb6f 100644 --- a/frigate/api/export.py +++ b/frigate/api/export.py @@ -4,6 +4,7 @@ import logging from pathlib import Path from typing import Optional +import psutil from flask import ( Blueprint, current_app, @@ -14,6 +15,7 @@ from flask import ( from peewee import DoesNotExist from werkzeug.utils import secure_filename +from frigate.const import EXPORT_DIR from frigate.models import Export, Recordings from frigate.record.export import PlaybackFactorEnum, RecordingExporter @@ -140,6 +142,28 @@ def export_delete(id: str): 404, ) + files_in_use = [] + for process in psutil.process_iter(): + try: + if process.name() != "ffmpeg": + continue + flist = process.open_files() + if flist: + for nt in flist: + if nt.path.startswith(EXPORT_DIR): + files_in_use.append(nt.path.split("/")[-1]) + except psutil.Error: + continue + + logger.error(f"comparing {export.video_path.split('/')[-1]} to {files_in_use}") + if export.video_path.split("/")[-1] in files_in_use: + return make_response( + jsonify( + {"success": False, "message": "Can not delete in progress export."} + ), + 400, + ) + Path(export.video_path).unlink(missing_ok=True) if export.thumb_path: diff --git a/web/src/components/card/ExportCard.tsx b/web/src/components/card/ExportCard.tsx index ec305648f..ce21113e7 100644 --- a/web/src/components/card/ExportCard.tsx +++ b/web/src/components/card/ExportCard.tsx @@ -109,43 +109,38 @@ export default function ExportCard({ "relative flex aspect-video items-center justify-center rounded-lg bg-black md:rounded-2xl", className, )} - onMouseEnter={ - isDesktop && !exportedRecording.in_progress - ? () => setHovered(true) - : undefined - } - onMouseLeave={ - isDesktop && !exportedRecording.in_progress - ? () => setHovered(false) - : undefined - } - onClick={ - isDesktop || exportedRecording.in_progress - ? undefined - : () => setHovered(!hovered) - } + onMouseEnter={isDesktop ? () => setHovered(true) : undefined} + onMouseLeave={isDesktop ? () => setHovered(false) : undefined} + onClick={isDesktop ? undefined : () => setHovered(!hovered)} > {hovered && ( <>