Auto Print Dialog checkpoint: setting and basic function

This commit is contained in:
Gangoke
2026-06-15 21:34:13 -10:00
parent 1f300589d1
commit 778c4ce85a
12 changed files with 91 additions and 29 deletions

View File

@ -339,6 +339,9 @@ function applyLang(){
setText('opt-slot-auto',T.settings_slot_auto);
setText('lbl-auto-leveling',T.settings_auto_leveling);
setText('lbl-camera-on-print',T.settings_camera_on_print);
setText('lbl-file-ready-mode',T.settings_file_ready_mode);
setText('opt-file-ready-banner',T.settings_file_ready_banner);
setText('opt-file-ready-dialog',T.settings_file_ready_dialog);
setText('lbl-web-upload-warning',T.settings_web_upload_warning);
setText('lbl-update-check',T.update_check);
@ -620,12 +623,25 @@ function applyState(){
var banner=document.getElementById('conn-error-banner');
if(banner){if(s.connection_error&&_printers.length>0){banner.textContent='⚠ '+tr('lbl_conn_error')+' '+s.connection_error;banner.style.display='block';}else{banner.style.display='none';}}
var frb=document.getElementById('file-ready-banner');
var filamentDialog=document.getElementById('filament-dialog');
var filamentDialogOpen=!!(filamentDialog&&filamentDialog.classList.contains('open'));
var readyFile=s.file_ready||'';
var readyStandby=!!(readyFile&&s.print_state==='standby');
var dialogMode=!!s.file_ready_dialog;
if(frb){
if(s.file_ready&&s.print_state==='standby'){
document.getElementById('file-ready-name').textContent=s.file_ready;
if(readyStandby&&!dialogMode){
document.getElementById('file-ready-name').textContent=readyFile;
frb.style.display='flex';
}else{frb.style.display='none';}
}else{
frb.style.display='none';
}
}
var shouldAutoOpen=(_readyStateInitialized&&readyStandby&&dialogMode&&!filamentDialogOpen&&readyFile!==_lastReadyFile);
if(shouldAutoOpen){
setTimeout(function(){ startReadyFileWithSlots(); },0);
}
_lastReadyFile=readyFile;
_readyStateInitialized=true;
// skip-button (mid-print) nur sichtbar wenn aktuell gedruckt wird
var printing=(s.print_state==='printing'||s.print_state==='paused');
var skipBtn=document.getElementById('d-btn-skip');
@ -911,6 +927,7 @@ function openSettings(){
document.getElementById('s-default-slot').value=d.default_ams_slot||'auto';
document.getElementById('s-auto-leveling').checked=(d.auto_leveling===undefined?true:!!d.auto_leveling);
var cop=document.getElementById('s-camera-on-print');if(cop)cop.checked=!!d.camera_on_print;
var frm=document.getElementById('s-file-ready-mode');if(frm)frm.value=Number(d.file_ready_dialog)?'dialog':'banner';
var wuw=document.getElementById('s-web-upload-warning');if(wuw)wuw.checked=(d.web_upload_warning===undefined?true:!!d.web_upload_warning);
});
var v=localStorage.getItem('pollInterval')||'2000';
@ -1269,6 +1286,8 @@ function saveSettings(){
btn.disabled=true;btn.textContent='…';
var webUploadWarning=(document.getElementById('s-web-upload-warning')||{}).checked?1:0;
S.web_upload_warning=webUploadWarning;
var fileReadyDialog=(document.getElementById('s-file-ready-mode')||{}).value==='dialog'?1:0;
S.file_ready_dialog=fileReadyDialog;
post('/api/settings',{
printer_name: document.getElementById('s-printer-name').value,
printer_ip: document.getElementById('s-printer-ip').value,
@ -1280,6 +1299,7 @@ function saveSettings(){
default_ams_slot: document.getElementById('s-default-slot').value,
auto_leveling: document.getElementById('s-auto-leveling').checked?1:0,
camera_on_print: (document.getElementById('s-camera-on-print')||{}).checked?1:0,
file_ready_dialog:fileReadyDialog,
web_upload_warning:webUploadWarning,
}).then(function(){
btn.textContent=T.update_restarting;
@ -1927,6 +1947,8 @@ function formatDur(sec){
var _storeFileId=null;
var _storeFilename=null;
var _filamentDialogMode='store'; // 'store' oder 'banner'
var _readyStateInitialized=false;
var _lastReadyFile='';
var _pendingWebVerifyFileId=null;
var _pendingWebVerifyFilename='';
var _pendingWebVerifyAction=null;
@ -1960,9 +1982,13 @@ function storePrint(fileId, filename){
}
function openStorePrintDialog(fileId, filename, fileObj){
openStoreLikePrintDialog(fileId, filename, fileObj, 'store');
}
function openStoreLikePrintDialog(fileId, filename, fileObj, dialogMode){
_storeFileId=fileId;
_storeFilename=filename;
_filamentDialogMode='store';
_filamentDialogMode=dialogMode||'store';
maybeGateWebUpload(fileObj, function(){
// GCode-Filamente aus Store-Datei holen (für Vorschau im Dialog)
_setGcodeFilamentsFromFileObj(fileObj);
@ -2069,37 +2095,36 @@ function startReadyFileWithSlots(){
maybeGateWebUpload(currentFile, function(){ startReadyFileWithSlots(); });
return;
}
_filamentDialogMode='banner';
_storeFilename=S.file_ready||'';
// Banner must never reuse stale store-file context.
_storeFileId=null;
_gcodeFilaments=[];
function openWithSlots(){
fetch(_apiUrl('/kx/filament/slots')).then(function(r){return r.json()}).then(function(d){
openFilamentDialog(d.result||[]);
}).catch(function(){openFilamentDialog([]);});
}
var fileObj=(storeFiles||[]).find(function(f){return f.filename===_storeFilename;});
var targetFilename=S.file_ready||'';
var fileObj=(storeFiles||[]).find(function(f){return f.filename===targetFilename;});
if(fileObj){
_storeFileId=fileObj.id;
_setGcodeFilamentsFromFileObj(fileObj);
openWithSlots();
openStoreLikePrintDialog(fileObj.id, targetFilename, fileObj, 'store');
return;
}
// Fallback: refresh file list, then resolve current file by filename.
fetch(_apiUrl('/kx/files')).then(function(r){return r.json()}).then(function(d){
storeFiles=d.result||[];
var refreshed=(storeFiles||[]).find(function(f){return f.filename===_storeFilename;});
var refreshed=(storeFiles||[]).find(function(f){return f.filename===targetFilename;});
if(refreshed){
_storeFileId=refreshed.id;
_setGcodeFilamentsFromFileObj(refreshed);
openStoreLikePrintDialog(refreshed.id, targetFilename, refreshed, 'store');
return;
}
openWithSlots();
_filamentDialogMode='banner';
_storeFilename=targetFilename;
_storeFileId=null;
_gcodeFilaments=[];
fetch(_apiUrl('/kx/filament/slots')).then(function(r){return r.json()}).then(function(data){
openFilamentDialog(data.result||[]);
}).catch(function(){openFilamentDialog([]);});
}).catch(function(){
openWithSlots();
_filamentDialogMode='banner';
_storeFilename=targetFilename;
_storeFileId=null;
_gcodeFilaments=[];
fetch(_apiUrl('/kx/filament/slots')).then(function(r){return r.json()}).then(function(data){
openFilamentDialog(data.result||[]);
}).catch(function(){openFilamentDialog([]);});
});
}

View File

@ -89,6 +89,13 @@
<div>
<div class="modal-section" id="modal-sec-print">Druckeinstellungen</div>
<div class="modal-field">
<label id="lbl-file-ready-mode"></label>
<select id="s-file-ready-mode">
<option value="dialog" id="opt-file-ready-dialog"></option>
<option value="banner" id="opt-file-ready-banner"></option>
</select>
</div>
<div class="modal-field">
<label id="lbl-default-slot">Standard-Slot (Einfarbdruck)</label>
<select id="s-default-slot">