From 61f94fa288e65ecaa97cdd2d8eac01e48876a8a4 Mon Sep 17 00:00:00 2001 From: KarnerF Date: Tue, 11 Aug 2026 18:15:48 +0200 Subject: [PATCH] Auto-Start: separate toggle + ELF selector buttons --- main.c | 59 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/main.c b/main.c index 01d7d28..e9137ec 100644 --- a/main.c +++ b/main.c @@ -947,15 +947,19 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) { sm_running ? "stop" : "start", sm_running ? "Stop" : "Start"); { SMPrefs prefs; read_prefs(&prefs); - const char *elfname="Auto-Start"; - if(prefs.auto_start&&prefs.preferred_elf[0]){ + /* Auto-Start toggle */ + H("", + prefs.auto_start?"start":"stop"); + /* ELF selector — only visible when preferred ELF is set */ + if(prefs.preferred_elf[0]){ const char *sl=strrchr(prefs.preferred_elf,'/'); - elfname=sl?sl+1:prefs.preferred_elf; - } - H("", - prefs.auto_start?"start":"stop", - prefs.auto_start?prefs.preferred_elf:"Auto-Start deaktiviert", - elfname); } + const char *nm=sl?sl+1:prefs.preferred_elf; + H("", + prefs.preferred_elf, nm); + } else { + H(""); + } } H(""); /* close left flex */ H("
" "AUTO" @@ -1525,24 +1529,29 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) { /* restore panel after USB-triggered reload */ "var _rp=sessionStorage.getItem('panel');" "if(_rp){var _rb=document.querySelector('.nav-item[data-p=\"'+_rp+'\"]');if(_rb)showP(_rb);}" - "function toggleAutoStart(btn){var on=btn.style.color!=='rgb(16, 185, 129)'&&btn.style.color!=='#10b981';" - "if(btn.style.borderColor==='rgb(16, 185, 129)'||btn.style.borderColor==='#10b981')on=false;else on=true;" - "btn.style.background=on?'rgba(16,185,129,.15)':'transparent';" - "btn.style.borderColor=on?'#10b981':'var(--border)';" - "btn.style.color=on?'#10b981':'var(--dim)';" - "saveAutoStart(on);}" - "function toggleAS(btn){var isOn=btn.classList.contains('start');" - "if(isOn){btn.className='sm-ctrl stop';btn.textContent='Auto-Start';btn.title='Auto-Start deaktiviert';" + "function toggleAS(){var btn=document.getElementById('as-btn');var isOn=btn.classList.contains('start');" + "if(isOn){btn.className='sm-ctrl stop';" "fetch('/api/prefs/save',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'auto_start=0'});}" - "else{fetch('/api/sm/scan').then(function(r){return r.json();}).then(function(d){" - "if(d.count===0)alert(_t.elf_nf);" - "else if(d.count===1)setASElf(btn,d.paths[0]);" - "else showElfPicker(null,d.paths,function(p){setASElf(btn,p);});" - "}).catch(function(){alert(_t.err);});}}" - "function setASElf(btn,path){var nm=path.split('/').pop();" - "btn.className='sm-ctrl start';btn.textContent=nm;btn.title=path;" - "fetch('/api/prefs/save',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'}," - "body:'auto_start=1&preferred_elf='+encodeURIComponent(path)});}" + "else{var eb=document.getElementById('as-elf-btn');" + "if(eb&&eb.style.display!=='none'&&eb.textContent.trim()){" + /* ELF already set — just enable */ + "btn.className='sm-ctrl start';" + "fetch('/api/prefs/save',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'auto_start=1'});}" + "else pickASElf(true);}}" /* no ELF yet — open picker */ + "function pickASElf(enableAfter){" + "fetch('/api/sm/scan').then(function(r){return r.json();}).then(function(d){" + "if(d.count===0){alert(_t.elf_nf);return;}" + "var cb=function(path){setASElf(path,enableAfter);};" + "if(d.count===1)cb(d.paths[0]);else showElfPicker(null,d.paths,cb);" + "}).catch(function(){alert(_t.err);});}" + "function setASElf(path,enable){" + "var nm=path.split('/').pop();" + "var eb=document.getElementById('as-elf-btn');" + "if(eb){eb.textContent=nm+' \u25bc';eb.title=path;eb.className='sm-ctrl start';eb.style.display='';}" + "var ab=document.getElementById('as-btn');" + "if(enable&&ab)ab.className='sm-ctrl start';" + "var body='preferred_elf='+encodeURIComponent(path)+(enable?'&auto_start=1':'');" + "fetch('/api/prefs/save',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body});}" "function clearPrefElf(){fetch('/api/prefs/save',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'preferred_elf='}).then(function(){var l=document.getElementById('pref-elf-lbl'),b=document.getElementById('pref-elf-clr');if(l){l.style.display='none';l.textContent='';}if(b)b.style.display='none';});}" "function smVer(ver,maj,min,suf,num){""if(!ver)return false;""var m=ver.match(/^(\\d+)\\.(\\d+)(alpha|beta|test)?(\\d+)?/);""if(!m)return false;""var a=parseInt(m[1]),b=parseInt(m[2]),c=m[3]||'',d=parseInt(m[4]||'0');""if(a>maj)return true;if(amin)return true;if(bmp)return true;if(vp=num;}""function refreshStatus(){""fetch('/api/status').then(r=>r.json()).then(d=>{""var c=document.getElementById('sm-status-chip');""if(!c)return;""var col=d.running?'#10b981':'#f87171';""c.innerHTML=' ShadowMount '+d.status+'';""var v=document.getElementById('sm-ver-chip');""if(v){v.style.display=(d.running&&d.version!=='nicht aktiv')?'flex':'none';""if(d.version!=='nicht aktiv')v.innerHTML='v '+d.version+'';}""var ver=d.version||'';""var ar=!d.running||smVer(ver,1,7,'alpha',3);""var pim=!d.running||smVer(ver,1,7,'alpha',4);""var as=document.getElementById('ar-wrap');""if(as){as.style.opacity=ar?\'1\':\'0.35\';as.style.pointerEvents=ar?\'auto\':\'none\';}""var ab=document.querySelectorAll('.ar-b');ab.forEach(function(e){e.style.display=ar?'none':'inline';});""var pb=document.getElementById('pim-badge');""if(pb)pb.style.display=pim?'none':'inline';""var pr=document.getElementById('pim-row');""if(pr)pr.style.opacity=pim?'1':'0.35';""if(pr)pr.style.pointerEvents=pim?'auto':'none';""var lb=document.getElementById('lang-badge');""if(lb)lb.style.display=pim?'none':'inline';""var lr=document.getElementById('lang-row');""if(lr)lr.style.opacity=pim?'1':'0.35';""if(lr)lr.style.pointerEvents=pim?'auto':'none';""var api=!d.running||smVer(ver,1,7,'alpha',3);""var aw=document.getElementById('api-wrap');""if(aw){aw.style.opacity=api?'1':'0.35';aw.style.pointerEvents=api?'auto':'none';}""var apib=document.getElementById('api-badge');""if(apib)apib.style.display=api?'none':'inline';""var fan=!d.running||smVer(ver,1,7,'alpha',5);""var fr=document.getElementById('fan-row');""if(fr){fr.style.opacity=fan?'1':'0.35';fr.style.pointerEvents=fan?'auto':'none';}""var fb=fr?fr.querySelector('.vbadge'):null;""if(fb)fb.style.display=fan?'none':'inline';""var cb=document.getElementById('sm-ctrl-btn');""if(cb){cb.setAttribute('data-action',d.running?'stop':'start');cb.className='sm-ctrl '+(d.running?'stop':'start');cb.textContent=d.running?'Stop':'Start';}""}).catch(()=>{});}""refreshStatus();""setInterval(refreshStatus,10000);""function smCtrl(){var btn=document.getElementById('sm-ctrl-btn');if(!btn)return;var action=btn.getAttribute('data-action');if(action==='stop'){btn.disabled=true;fetch('/api/sm/stop').then(function(){setTimeout(refreshStatus,1500);setTimeout(function(){btn.disabled=false;},2000);}).catch(function(){btn.disabled=false;});}else{btn.disabled=true;fetch('/api/sm/scan').then(function(r){return r.json();}).then(function(d){if(d.count===0){alert(_t.elf_nf);btn.disabled=false;}else if(d.count===1){launchElf(btn,d.paths[0]);}else{btn.disabled=false;showElfPicker(btn,d.paths);}}).catch(function(){btn.disabled=false;});}}""function launchElf(btn,path){if(btn)btn.disabled=true;fetch('/api/sm/start?path='+encodeURIComponent(path)).then(function(r){return r.json();}).then(function(d){" "if(btn)btn.disabled=false;"