forked from viewit/KX-Bridge-Release
Feat: gcode download
This commit is contained in:
@@ -1514,6 +1514,19 @@ class KobraXBridge:
|
||||
return self._json_cors({"result": "ok"})
|
||||
return self._json_cors({"error": "not found"}, status=404)
|
||||
|
||||
async def handle_kx_file_download(self, request):
|
||||
file_id = request.match_info["file_id"]
|
||||
f = self._store.get_file(file_id)
|
||||
if not f:
|
||||
return self._json_cors({"error": "not found"}, status=404)
|
||||
path = f.get("path") or ""
|
||||
if not path or not os.path.isfile(path):
|
||||
return self._json_cors({"error": "not found"}, status=404)
|
||||
filename = os.path.basename(f.get("filename") or path)
|
||||
return web.FileResponse(path, headers={
|
||||
"Content-Disposition": f'attachment; filename="{filename}"'
|
||||
})
|
||||
|
||||
async def handle_kx_file_verify(self, request):
|
||||
file_id = request.match_info["file_id"]
|
||||
if self._store.clear_web_unverified(file_id):
|
||||
@@ -3483,6 +3496,7 @@ def build_app(bridge: KobraXBridge) -> web.Application:
|
||||
r.add_post("/kx/print", bridge.handle_kx_print)
|
||||
r.add_get("/kx/files", bridge.handle_kx_files)
|
||||
r.add_delete("/kx/files/{file_id}", bridge.handle_kx_file_delete)
|
||||
r.add_get("/kx/files/{file_id}/download", bridge.handle_kx_file_download)
|
||||
r.add_post("/kx/files/{file_id}/verify", bridge.handle_kx_file_verify)
|
||||
r.add_get("/kx/filament/slots", bridge.handle_kx_filament_slots)
|
||||
r.add_get("/kx/history", bridge.handle_kx_history)
|
||||
|
||||
@@ -146,6 +146,7 @@ var LANG_DE={
|
||||
store_empty:'Noch keine Dateien hochgeladen.',
|
||||
store_refresh:'↻ Aktualisieren',
|
||||
store_print:'▶ Drucken',
|
||||
store_download:'⬇ Download',
|
||||
store_delete_confirm:'Datei löschen?',
|
||||
store_print_confirm:'Datei drucken?',
|
||||
store_web_verify_title:'Datei verifizieren',
|
||||
@@ -214,6 +215,7 @@ var LANG_EN={
|
||||
store_empty:'No files uploaded yet.',
|
||||
store_refresh:'↻ Refresh',
|
||||
store_print:'▶ Print',
|
||||
store_download:'⬇ Download',
|
||||
store_delete_confirm:'Delete file?',
|
||||
store_print_confirm:'Print file?',
|
||||
store_web_verify_title:'Verify file',
|
||||
@@ -1663,6 +1665,8 @@ function renderStore(){
|
||||
'<div style="display:flex;gap:6px;margin-top:auto">'+
|
||||
'<button onclick="storePrint(\''+f.id+'\',\''+f.filename.replace(/'/g,"\\'")+'\')" '+
|
||||
'style="flex:1;font-size:12px;padding:5px;background:var(--accent);color:#fff;border:none;border-radius:6px;cursor:pointer">'+T.store_print+'</button>'+
|
||||
'<button onclick="storeDownload(\''+f.id+'\')" title="'+T.store_download+'" '+
|
||||
'style="font-size:12px;padding:5px 8px;background:var(--raised);border:1px solid var(--border);border-radius:6px;color:var(--txt2);cursor:pointer">⬇</button>'+
|
||||
'<button onclick="storeDelete(\''+f.id+'\')" '+
|
||||
'style="font-size:12px;padding:5px 8px;background:var(--raised);border:1px solid var(--border);border-radius:6px;color:var(--txt2);cursor:pointer">🗑</button>'+
|
||||
'</div>'+
|
||||
@@ -2239,6 +2243,15 @@ function storeDelete(fileId){
|
||||
});
|
||||
}
|
||||
|
||||
function storeDownload(fileId){
|
||||
var a=document.createElement('a');
|
||||
a.href=_apiUrl('/kx/files/'+encodeURIComponent(fileId)+'/download');
|
||||
a.style.display='none';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
}
|
||||
|
||||
// ── Drucker hinzufügen ──
|
||||
function openAddPrinterDialog(){
|
||||
document.getElementById('apd-ip').value='';
|
||||
|
||||
Reference in New Issue
Block a user