Cargar splash local y estabilizar la transición loading→dashboard (#12)

* Fix startup loading window sequencing

* Remove local splash and show bundle loading only

* Increase loading delay and force-stop NodeCG on quit
This commit is contained in:
Pandipipas
2026-02-10 22:10:47 +01:00
committed by GitHub
parent 9aa5553550
commit 73100ce43c
+31 -6
View File
@@ -8,10 +8,11 @@ const DEFAULT_NODECG_PORT = process.env.NODECG_PORT ?? "9090";
const DEFAULT_BUNDLE_NAME = process.env.NODECG_BUNDLE_NAME ?? "scoreko-dev"; const DEFAULT_BUNDLE_NAME = process.env.NODECG_BUNDLE_NAME ?? "scoreko-dev";
const DEFAULT_DASHBOARD_ROUTE = process.env.SCOREKO_DASHBOARD_ROUTE ?? "dashboard/example/main.html?standalone=true"; const DEFAULT_DASHBOARD_ROUTE = process.env.SCOREKO_DASHBOARD_ROUTE ?? "dashboard/example/main.html?standalone=true";
const DEFAULT_LOADING_ROUTE = process.env.SCOREKO_LOADING_ROUTE ?? "dashboard/loading/main.html?standalone=true"; const DEFAULT_LOADING_ROUTE = process.env.SCOREKO_LOADING_ROUTE ?? "dashboard/loading/main.html?standalone=true";
const LOAD_DELAY_MS = Number.parseInt(process.env.ELECTRON_LOAD_DELAY_MS ?? "2500", 10); const LOAD_DELAY_MS = Number.parseInt(process.env.ELECTRON_LOAD_DELAY_MS ?? "10000", 10);
const STARTUP_TIMEOUT_MS = Number.parseInt(process.env.NODECG_STARTUP_TIMEOUT_MS ?? "30000", 10); const STARTUP_TIMEOUT_MS = Number.parseInt(process.env.NODECG_STARTUP_TIMEOUT_MS ?? "30000", 10);
const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true"; const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true";
const NODE_BINARY = process.env.NODECG_NODE_BINARY ?? "node"; const NODE_BINARY = process.env.NODECG_NODE_BINARY ?? "node";
const NODECG_KILL_TIMEOUT_MS = Number.parseInt(process.env.NODECG_KILL_TIMEOUT_MS ?? "2500", 10);
const isDev = !app.isPackaged; const isDev = !app.isPackaged;
const rootPath = isDev ? path.resolve(__dirname, "../..") : process.resourcesPath; const rootPath = isDev ? path.resolve(__dirname, "../..") : process.resourcesPath;
@@ -235,26 +236,36 @@ async function launch(): Promise<void> {
mainWindow = createMainWindow(); mainWindow = createMainWindow();
loadingWindow = createLoadingWindow(); loadingWindow = createLoadingWindow();
loadingWindow.show();
lastNodeCGOutput = ""; lastNodeCGOutput = "";
nodecgProcess = startNodeCG(); nodecgProcess = startNodeCG();
await sleep(Math.max(0, LOAD_DELAY_MS));
await waitForNodeCGReady(Date.now()); await waitForNodeCGReady(Date.now());
if (!loadingWindow || loadingWindow.isDestroyed()) {
return;
}
try { try {
await loadingWindow.loadURL(loadingUrl); await loadingWindow.loadURL(loadingUrl);
loadingWindow.show();
} catch (error) { } catch (error) {
log("No se pudo cargar la ruta de loading del bundle", loadingUrl, error); log("No se pudo cargar la ruta de loading del bundle", loadingUrl, error);
} }
const loadingShownAt = Date.now();
if (!mainWindow) { if (!mainWindow) {
return; return;
} }
try { try {
await mainWindow.loadURL(dashboardUrl); await mainWindow.loadURL(dashboardUrl);
const remainingLoadingDelay = Math.max(0, LOAD_DELAY_MS - (Date.now() - loadingShownAt));
if (remainingLoadingDelay > 0) {
await sleep(remainingLoadingDelay);
}
mainWindow.show(); mainWindow.show();
} catch (error) { } catch (error) {
throw new Error(`No se pudo cargar el dashboard en ${dashboardUrl}. ${String(error)}`); throw new Error(`No se pudo cargar el dashboard en ${dashboardUrl}. ${String(error)}`);
@@ -271,8 +282,18 @@ function stopNodeCG(): void {
return; return;
} }
log(`Stopping NodeCG pid=${nodecgProcess.pid}`); const processToStop = nodecgProcess;
nodecgProcess.kill("SIGTERM"); const pid = processToStop.pid;
log(`Stopping NodeCG pid=${pid}`);
processToStop.kill("SIGTERM");
setTimeout(() => {
if (processToStop.exitCode === null && processToStop.signalCode === null) {
log(`NodeCG did not exit after SIGTERM, forcing SIGKILL pid=${pid}`);
processToStop.kill("SIGKILL");
}
}, Math.max(0, NODECG_KILL_TIMEOUT_MS));
} }
function log(...args: unknown[]): void { function log(...args: unknown[]): void {
@@ -314,6 +335,10 @@ app.on("before-quit", () => {
stopNodeCG(); stopNodeCG();
}); });
app.on("will-quit", () => {
stopNodeCG();
});
process.on("exit", () => { process.on("exit", () => {
stopNodeCG(); stopNodeCG();
}); });