feat: auto-restart after update with 3s countdown, remove manual restart button
Some checks failed
Build & Release / build (push) Failing after 54s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MiTHRAL 2026-04-22 01:59:38 -04:00
parent 79050a43b3
commit a30cdd0538
2 changed files with 16 additions and 12 deletions

View file

@ -27,17 +27,22 @@ ipcRenderer.on('upd-progress',(_,p)=>{
document.getElementById('status').textContent=p<100?'Downloading… '+p+'%':'Installing…'; document.getElementById('status').textContent=p<100?'Downloading… '+p+'%':'Installing…';
}); });
ipcRenderer.on('upd-ready',(_,v)=>{ ipcRenderer.on('upd-ready',(_,v)=>{
document.getElementById('title').textContent='Sanctum '+v+' Ready'; document.getElementById('title').textContent='Sanctum '+v+' installed';
document.getElementById('status').textContent='Restart to apply the update.';
document.getElementById('bar').style.width='100%'; document.getElementById('bar').style.width='100%';
document.getElementById('btn').style.display='block'; var s=document.getElementById('status');
var n=2;
s.textContent='Restarting in '+n+'…';
var t=setInterval(function(){
n--;
if(n<=0){clearInterval(t);s.textContent='Restarting…';}
else s.textContent='Restarting in '+n+'…';
},1000);
}); });
ipcRenderer.on('upd-error',(_,msg)=>{ ipcRenderer.on('upd-error',(_,msg)=>{
document.getElementById('title').textContent='Update Failed'; document.getElementById('title').textContent='Update Failed';
document.getElementById('status').textContent=msg; document.getElementById('status').textContent=msg;
document.getElementById('bar').style.background='#f38ba8'; document.getElementById('bar').style.background='#f38ba8';
}); });
document.getElementById('btn').onclick=()=>ipcRenderer.send('upd-restart');
</script></body></html>`; </script></body></html>`;
export function showUpdateWindow() { export function showUpdateWindow() {
@ -65,15 +70,14 @@ export function setUpdateProgress(percent: number) {
win?.webContents.send("upd-progress", Math.round(percent)); win?.webContents.send("upd-progress", Math.round(percent));
} }
export function setUpdateReady(version: string) { export function setUpdateReady(version: string, relaunch: boolean) {
win?.webContents.send("upd-ready", version); win?.webContents.send("upd-ready", version);
setTimeout(() => {
if (relaunch) app.relaunch();
app.exit(0);
}, 3000);
} }
export function setUpdateError(msg: string) { export function setUpdateError(msg: string) {
win?.webContents.send("upd-error", msg); win?.webContents.send("upd-error", msg);
} }
ipcMain.on("upd-restart", () => {
if (process.platform !== "win32") app.relaunch();
app.exit(0);
});

View file

@ -125,7 +125,7 @@ async function downloadAndInstall(url: string, version: string) {
windowsHide: false, windowsHide: false,
}); });
child.unref(); child.unref();
setUpdateReady(version); // restart button will just app.exit(0) — batch relaunches setUpdateReady(version, false); // batch script handles relaunch
} else { } else {
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
const cmd = `unzip -o "${zipPath}" -d "${extractDir}" && SUBDIR=$(ls "${extractDir}" | head -1) && rm -f "${installDir}/sanctum" && cp -rT "${extractDir}/$SUBDIR" "${installDir}"`; const cmd = `unzip -o "${zipPath}" -d "${extractDir}" && SUBDIR=$(ls "${extractDir}" | head -1) && rm -f "${installDir}/sanctum" && cp -rT "${extractDir}/$SUBDIR" "${installDir}"`;
@ -134,7 +134,7 @@ async function downloadAndInstall(url: string, version: string) {
else resolve(); else resolve();
}); });
}); });
setUpdateReady(version); setUpdateReady(version, true);
} }
} }