Improve error checking and handling for recordings export (#7647)

* Improve error checking and handling for recordings export

* Cleanup

* Remove order by
This commit is contained in:
Nicolas Mowen 2023-09-02 04:42:33 -06:00 committed by GitHub
parent 36434bb26d
commit db6ee41f3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 4 deletions

View File

@ -1617,7 +1617,31 @@ def vod_event(id):
methods=["POST"],
)
def export_recording(camera_name: str, start_time, end_time):
playback_factor = request.get_json(silent=True).get("playback", "realtime")
if not camera_name or not current_app.frigate_config.cameras.get(camera_name):
return make_response(
jsonify(
{"success": False, "message": f"{camera_name} is not a valid camera."}
),
404,
)
json: dict[str, any] = request.get_json(silent=True) or {}
playback_factor = json.get("playback", "realtime")
recordings_count = (
Recordings.select()
.where(
Recordings.start_time.between(start_time, end_time)
| Recordings.end_time.between(start_time, end_time)
| ((start_time > Recordings.start_time) & (end_time < Recordings.end_time))
)
.where(Recordings.camera == camera_name)
.count()
)
if recordings_count <= 0:
return "No recordings found for time range", 400
exporter = RecordingExporter(
current_app.frigate_config,
camera_name,

View File

@ -52,11 +52,17 @@ export default function Export() {
axios
.post(`export/${camera}/start/${start}/end/${end}`, { playback })
.then(() => {
setMessage({ text: 'Successfully started export. View the file in the /exports folder.', error: false });
.then((response) => {
if (response.status == 200) {
setMessage({ text: 'Successfully started export. View the file in the /exports folder.', error: false });
}
})
.catch((error) => {
setMessage({ text: `Failed to start export: ${error.response.data.message}`, error: true });
if (error.response) {
setMessage({ text: `Failed to start export: ${error.response.data.message}`, error: true });
} else {
setMessage({ text: `Failed to start export: ${error.message}`, error: true });
}
});
};