mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-05 21:22:07 +00:00
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:
+31
-6
@@ -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_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 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 USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true";
|
||||
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 rootPath = isDev ? path.resolve(__dirname, "../..") : process.resourcesPath;
|
||||
@@ -235,26 +236,36 @@ async function launch(): Promise<void> {
|
||||
mainWindow = createMainWindow();
|
||||
loadingWindow = createLoadingWindow();
|
||||
|
||||
loadingWindow.show();
|
||||
|
||||
lastNodeCGOutput = "";
|
||||
nodecgProcess = startNodeCG();
|
||||
|
||||
await sleep(Math.max(0, LOAD_DELAY_MS));
|
||||
await waitForNodeCGReady(Date.now());
|
||||
|
||||
if (!loadingWindow || loadingWindow.isDestroyed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await loadingWindow.loadURL(loadingUrl);
|
||||
loadingWindow.show();
|
||||
} catch (error) {
|
||||
log("No se pudo cargar la ruta de loading del bundle", loadingUrl, error);
|
||||
}
|
||||
|
||||
const loadingShownAt = Date.now();
|
||||
|
||||
if (!mainWindow) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await mainWindow.loadURL(dashboardUrl);
|
||||
|
||||
const remainingLoadingDelay = Math.max(0, LOAD_DELAY_MS - (Date.now() - loadingShownAt));
|
||||
if (remainingLoadingDelay > 0) {
|
||||
await sleep(remainingLoadingDelay);
|
||||
}
|
||||
|
||||
mainWindow.show();
|
||||
} catch (error) {
|
||||
throw new Error(`No se pudo cargar el dashboard en ${dashboardUrl}. ${String(error)}`);
|
||||
@@ -271,8 +282,18 @@ function stopNodeCG(): void {
|
||||
return;
|
||||
}
|
||||
|
||||
log(`Stopping NodeCG pid=${nodecgProcess.pid}`);
|
||||
nodecgProcess.kill("SIGTERM");
|
||||
const processToStop = nodecgProcess;
|
||||
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 {
|
||||
@@ -314,6 +335,10 @@ app.on("before-quit", () => {
|
||||
stopNodeCG();
|
||||
});
|
||||
|
||||
app.on("will-quit", () => {
|
||||
stopNodeCG();
|
||||
});
|
||||
|
||||
process.on("exit", () => {
|
||||
stopNodeCG();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user