feat: add download button to Pi videos list
- /api/local-video/file?download=1 serves file as attachment - Download link (green DL button) added to each row in local-videos.js - Dashcam USB files skipped: no persistent mount for direct serve; use Import then download from Pi Videos Co-authored-by: Copilot <[email protected]>
This commit is contained in:
@@ -146,7 +146,17 @@ def local_video_file():
|
|||||||
return jsonify(error=str(error)), 400
|
return jsonify(error=str(error)), 400
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
return jsonify(error=f"Local video not found: {relative_path}"), 404
|
return jsonify(error=f"Local video not found: {relative_path}"), 404
|
||||||
return send_file(path, conditional=True, as_attachment=False)
|
as_attachment = request.args.get("download") == "1"
|
||||||
|
return send_file(path, conditional=True, as_attachment=as_attachment)
|
||||||
|
|
||||||
|
@app.route('/api/dash/file/download')
|
||||||
|
def dash_file_download():
|
||||||
|
relative_path = request.args.get("path", "")
|
||||||
|
try:
|
||||||
|
path = app_dash.safe_video_path(app_dash.DEFAULT_MOUNT_POINT, relative_path)
|
||||||
|
except (ValueError, FileNotFoundError) as error:
|
||||||
|
return jsonify(error=str(error)), 400
|
||||||
|
return send_file(path, as_attachment=True)
|
||||||
|
|
||||||
@app.route('/api/local-video/thumbnail')
|
@app.route('/api/local-video/thumbnail')
|
||||||
def local_video_thumbnail():
|
def local_video_thumbnail():
|
||||||
|
|||||||
@@ -188,6 +188,13 @@
|
|||||||
actionsDiv.appendChild(convertButton);
|
actionsDiv.appendChild(convertButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const downloadLink = document.createElement("a");
|
||||||
|
downloadLink.href = `/api/local-video/file?path=${encodeURIComponent(file.path)}&download=1`;
|
||||||
|
downloadLink.className = "btn btn-sm btn-outline-success btn-icon-mobile";
|
||||||
|
downloadLink.download = file.path.split("/").pop();
|
||||||
|
downloadLink.innerHTML = '<i class="fas fa-download"></i><span class="btn-label"> DL</span>';
|
||||||
|
actionsDiv.appendChild(downloadLink);
|
||||||
|
|
||||||
const deleteButton = document.createElement("button");
|
const deleteButton = document.createElement("button");
|
||||||
deleteButton.type = "button";
|
deleteButton.type = "button";
|
||||||
deleteButton.className = "btn btn-sm btn-outline-danger btn-icon-mobile";
|
deleteButton.className = "btn btn-sm btn-outline-danger btn-icon-mobile";
|
||||||
|
|||||||
Reference in New Issue
Block a user