Auto-retry games panel 3x on empty (SM startup); mount buttons in images table when title_id known

This commit is contained in:
KarnerF committed 2026-08-30 11:13:14 +02:00
1 parent 6a39da76e3
commit 5270958054
1 file changed
+23 -12
+23 -12
View File
@@ -1766,7 +1766,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
"if(l){l.textContent=nm;l.title=path;l.style.display='inline';}if(b)b.style.display='inline';}"
"setTimeout(refreshStatus,2000);})"
".catch(function(){if(btn)btn.disabled=false;});}""function showElfPicker(btn,paths,cb){var old=document.getElementById('sm-elf-picker');if(old)old.remove();var picker=document.createElement('div');picker.id='sm-elf-picker';picker.style.cssText='position:fixed;top:0;left:0;width:100%%;height:100%%;background:rgba(0,0,0,.75);display:flex;align-items:center;justify-content:center;z-index:9999;';var box=document.createElement('div');box.style.cssText='background:#0d111a;border:1px solid #1e2a42;border-radius:14px;padding:36px;min-width:500px;max-width:800px;';var title=document.createElement('p');title.style.cssText='margin:0 0 20px;font-size:.7rem;text-transform:uppercase;letter-spacing:.12em;color:#64748b;font-family:monospace;';title.textContent=_t.sel_sm;box.appendChild(title);paths.forEach(function(p){var b=document.createElement('button');b.style.cssText='display:block;width:100%%;margin-bottom:10px;padding:16px 18px;border-radius:8px;border:1px solid #1e2a42;background:#131927;color:#e2e8f0;cursor:pointer;text-align:left;font-family:monospace;font-size:.75rem;word-break:break-all;';b.textContent=p;b.onclick=function(){picker.remove();if(cb)cb(p);else launchElf(btn,p);};box.appendChild(b);});var cancel=document.createElement('button');cancel.style.cssText='display:block;width:100%%;padding:14px;border-radius:8px;border:1px solid #1e2a42;background:transparent;color:#64748b;cursor:pointer;font-family:monospace;font-size:.75rem;margin-top:6px;';cancel.textContent=_t.cancel;cancel.onclick=function(){picker.remove();};box.appendChild(cancel);picker.appendChild(box);document.body.appendChild(picker);}""document.querySelector('form').addEventListener('keydown',function(e){""if(e.key==='Enter'&&e.target.tagName!=='BUTTON')e.preventDefault();""});");
H("function loadGamePanel(){"
H("var _gpR=0;"
"function loadGamePanel(retry){_gpR=(retry||0);"
"var gl=document.getElementById('games-list');"
"var il=document.getElementById('images-list');"
"if(gl)gl.innerHTML='<p class=\"hint\">Lade...</p>';"
@@ -1777,11 +1778,15 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
"var gd=res[0],id=res[1];"
"if(!gl)return;"
"if(!gd||gd.error||gd.status){"
"gl.innerHTML='<p class=\"hint\" style=\"color:#f87171;\">SM API: '+(gd&&gd.error?gd.error:'nicht erreichbar')+'</p>';}"
"gl.innerHTML='<p class=\"hint\" style=\"color:#f87171;\">SM API nicht erreichbar &mdash; l\\u00e4uft ShadowMountPlus?</p>';}"
"else if(!gd.games||!gd.games.length){"
"gl.innerHTML='<p class=\"hint\">Keine Spiele gefunden</p>';}"
"else{"
"var h='';"
"if(_gpR<3){"
"gl.innerHTML='<p class=\"hint\">Warte auf SM... ('+(_gpR+1)+'/3)</p>';"
"setTimeout(function(){loadGamePanel(_gpR+1);},5000);"
"}else{"
"gl.innerHTML='<p class=\"hint\">Keine Spiele &mdash; SM scan noch aktiv?</p>';"
"}}"
"else{_gpR=0;var h='';"
"gd.games.forEach(function(g){"
"var tid=g.title_id||'';"
"var mn=g.mounted"
@@ -1809,7 +1814,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
"ih+='<tr style=\"border-bottom:1px solid var(--border);color:var(--dim);font-size:.7rem;\">';"
"ih+='<th style=\"text-align:left;padding:4px 8px;\">Datei / Pfad</th>';"
"ih+='<th style=\"padding:4px 8px;\">Typ</th><th style=\"padding:4px 8px;\">Gr\\u00f6\\u00dfe</th>';"
"ih+='<th style=\"padding:4px 8px;\">Mount</th></tr>';"
"ih+='<th style=\"padding:4px 8px;\">Mount</th><th style=\"padding:4px 8px;\"></th></tr>';"
"id.images.forEach(function(img){"
"var parts=(img.path||'').split('/');"
"var fn=parts.pop()||img.path;"
@@ -1817,14 +1822,20 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
"var ext=fn.indexOf('.')>-1?fn.split('.').pop().toUpperCase():'';"
"var sz=img.size?(img.size>1073741824?(img.size/1073741824).toFixed(2)+' GB':(img.size/1048576).toFixed(0)+' MB'):'?';"
"var st=img.mounted?'<span style=\"color:#10b981;\">&#9679; aktiv</span>':'<span style=\"color:var(--dim);\">&#9675;</span>';"
"var itid=img.title_id||'';"
"var iba=itid?(img.mounted"
"?'<button onclick=\"unmountGame(\\\''+itid+'\\\')\" style=\"background:transparent;border:1px solid #f87171;border-radius:4px;color:#f87171;padding:2px 8px;cursor:pointer;font-size:.7rem;\">Unmount</button>'"
":'<button onclick=\"mountGame(\\\''+itid+'\\\')\" style=\"background:transparent;border:1px solid var(--accent);border-radius:4px;color:var(--accent);padding:2px 8px;cursor:pointer;font-size:.7rem;\">Mount</button>')"
":'&ndash;';"
"ih+='<tr style=\"border-bottom:1px solid var(--border);\">';"
"ih+='<td style=\"padding:6px 8px;\"><span style=\"font-family:var(--mono);font-size:.76rem;\">'+fn+'</span>';"
"ih+='<br><span style=\"font-family:var(--mono);font-size:.65rem;color:var(--dim);\">'+dir+'</span></td>';"
"ih+='<td style=\"padding:6px 8px;text-align:center;font-family:var(--mono);font-size:.7rem;\">'+ext+'</td>';"
"ih+='<td style=\"padding:6px 8px;text-align:center;\">'+sz+'</td>';"
"ih+='<td style=\"padding:6px 8px;text-align:center;\">'+st+'</td></tr>';"
"ih+='<td style=\"padding:6px 8px;text-align:center;\">'+st+'</td>';"
"ih+='<td style=\"padding:6px 8px;text-align:center;\">'+iba+'</td></tr>';"
"});ih+='</table>';il.innerHTML=ih;});}"
"function loadGames(){loadGamePanel();}"
"function loadGames(){loadGamePanel(0);}"
"function mountGame(tid){"
"var el=document.getElementById('games-list');"
"if(el)el.innerHTML='<p class=\"hint\">Mounting '+tid+'...</p>';"
@@ -1832,8 +1843,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
".then(function(r){return r.json();})"
".then(function(d){"
"if(d.error&&el)el.innerHTML='<p class=\"hint\" style=\"color:#f87171;\">'+d.error+'</p>';"
"setTimeout(loadGamePanel,3000);})"
".catch(function(){setTimeout(loadGamePanel,3000);});}"
"setTimeout(function(){loadGamePanel(0);},3000);})"
".catch(function(){setTimeout(function(){loadGamePanel(0);},3000);});}"
"function unmountGame(tid){"
"var el=document.getElementById('games-list');"
"if(el)el.innerHTML='<p class=\"hint\">Unmounting '+tid+'...</p>';"
@@ -1841,8 +1852,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
".then(function(r){return r.json();})"
".then(function(d){"
"if(d.error&&el)el.innerHTML='<p class=\"hint\" style=\"color:#f87171;\">'+d.error+'</p>';"
"setTimeout(loadGamePanel,3000);})"
".catch(function(){setTimeout(loadGamePanel,3000);});}");
"setTimeout(function(){loadGamePanel(0);},3000);})"
".catch(function(){setTimeout(function(){loadGamePanel(0);},3000);});}");
H("function addPath(){"
"var c=document.getElementById('paths-list');"
"var d=document.createElement('div');d.className='path-row';"