Add delete with confirmation for trips and dashcam
- Confirmation modal in server base.html (window.confirmDelete promise helper) - Trip delete: trash button in Replay column (server-only via data-deletable on trip-list div), DELETE /api/v1/portal/trip/<id>, removes computed trip only (raw tracking_points kept) - Dashcam delete: trash button next to download, DELETE /api/v1/portal/dashcam/<id>, removes from DB + disk (best-effort file removal) - history.js: delete button gated on data-deletable='1' attribute; click handler intercepts before replay logic - db.py: delete_trip(), delete_dashcam_file() helpers Co-authored-by: Copilot <[email protected]>
This commit is contained in:
@@ -559,6 +559,36 @@ def recompute_trips():
|
||||
return jsonify(status="ok", trips_computed=n)
|
||||
|
||||
|
||||
@app.delete("/api/v1/portal/trip/<int:trip_id>")
|
||||
@require_login
|
||||
def portal_delete_trip(trip_id):
|
||||
device_id = _portal_device_id()
|
||||
if device_id is None:
|
||||
return jsonify(error="device not configured"), 404
|
||||
deleted = db.delete_trip(device_id, trip_id)
|
||||
if not deleted:
|
||||
return jsonify(error="trip not found"), 404
|
||||
return jsonify(status="ok")
|
||||
|
||||
|
||||
@app.delete("/api/v1/portal/dashcam/<int:file_id>")
|
||||
@require_login
|
||||
def portal_delete_dashcam(file_id):
|
||||
device_id = _portal_device_id()
|
||||
if device_id is None:
|
||||
return jsonify(error="device not configured"), 404
|
||||
storage_path = db.delete_dashcam_file(device_id, file_id)
|
||||
if storage_path is None:
|
||||
return jsonify(error="file not found"), 404
|
||||
# Remove from disk (best-effort — don't fail if file is already gone)
|
||||
try:
|
||||
if os.path.isfile(storage_path):
|
||||
os.remove(storage_path)
|
||||
except OSError:
|
||||
pass
|
||||
return jsonify(status="ok")
|
||||
|
||||
|
||||
@app.get("/api/trips")
|
||||
@require_login
|
||||
def portal_trips_compat():
|
||||
|
||||
Reference in New Issue
Block a user