fix: electron backend not starting

This commit is contained in:
LukeGus
2026-05-22 16:16:14 -05:00
parent 3bb305bc38
commit 4c2a317f24
6 changed files with 24 additions and 17 deletions
+5 -1
View File
@@ -423,6 +423,7 @@ app.commandLine.appendSwitch("--enable-features=NetworkService");
let mainWindow = null; let mainWindow = null;
let backendProcess = null; let backendProcess = null;
let backendStartFailed = false;
let tray = null; let tray = null;
let isQuitting = false; let isQuitting = false;
@@ -657,6 +658,9 @@ function startBackendServer() {
backendProcess.on("exit", (code, signal) => { backendProcess.on("exit", (code, signal) => {
logToFile(`Backend process exited with code ${code}, signal ${signal}`); logToFile(`Backend process exited with code ${code}, signal ${signal}`);
if (!resolved && code !== 0) {
backendStartFailed = true;
}
backendProcess = null; backendProcess = null;
if (!resolved) { if (!resolved) {
resolved = true; resolved = true;
@@ -1092,7 +1096,7 @@ ipcMain.handle("get-platform", () => {
ipcMain.handle("get-embedded-server-status", () => { ipcMain.handle("get-embedded-server-status", () => {
return { return {
running: backendProcess !== null && !backendProcess.killed, running: backendProcess !== null && !backendProcess.killed && !backendStartFailed,
embedded: !isDev, embedded: !isDev,
dataDir: isDev ? null : getBackendDataDir(), dataDir: isDev ? null : getBackendDataDir(),
}; };
+4 -1
View File
@@ -2021,12 +2021,15 @@ httpServer.on("error", (err: NodeJS.ErrnoException) => {
throw err; throw err;
}); });
httpServer.listen(HTTP_PORT, async () => { export const serverReady = new Promise<void>((resolve) => {
httpServer.listen(HTTP_PORT, async () => {
if (!fs.existsSync(uploadsDir)) { if (!fs.existsSync(uploadsDir)) {
fs.mkdirSync(uploadsDir, { recursive: true }); fs.mkdirSync(uploadsDir, { recursive: true });
} }
await initializeSecurity(); await initializeSecurity();
resolve();
});
}); });
const sslConfig = AutoSSLSetup.getSSLConfig(); const sslConfig = AutoSSLSetup.getSSLConfig();
+2 -1
View File
@@ -137,7 +137,8 @@ import {
}, },
); );
await import("./database/database.js"); const dbServer = await import("./database/database.js");
await (dbServer as unknown as { serverReady: Promise<void> }).serverReady;
await import("./ssh/terminal.js"); await import("./ssh/terminal.js");
await import("./ssh/tunnel.js"); await import("./ssh/tunnel.js");
await import("./ssh/file-manager.js"); await import("./ssh/file-manager.js");
+1 -4
View File
@@ -143,14 +143,11 @@ export function ElectronLoginForm({
{t("serverConfig.changeServer")} {t("serverConfig.changeServer")}
</span> </span>
</button> </button>
{!isEmbeddedServer && (
<div className="flex-1 mx-4 text-center"> <div className="flex-1 mx-4 text-center">
<span className="text-muted-foreground text-sm truncate block"> <span className="text-muted-foreground text-sm truncate block">
{displayUrl} {isEmbeddedServer ? t("serverConfig.localServer") : displayUrl}
</span> </span>
</div> </div>
)}
{isEmbeddedServer && <div className="flex-1" />}
<button <button
onClick={handleRefresh} onClick={handleRefresh}
className="p-2 text-foreground hover:text-primary transition-colors" className="p-2 text-foreground hover:text-primary transition-colors"
+2 -1
View File
@@ -91,7 +91,8 @@ export function ElectronServerConfig({
setError(null); setError(null);
try { try {
const maxRetries = 10; await new Promise((r) => setTimeout(r, 1500));
const maxRetries = 15;
for (let i = 0; i < maxRetries; i++) { for (let i = 0; i < maxRetries; i++) {
if (await probeBackend()) { if (await probeBackend()) {
setEmbeddedMode(true); setEmbeddedMode(true);
+2 -1
View File
@@ -31,7 +31,8 @@
"useEmbedded": "Use Local Server", "useEmbedded": "Use Local Server",
"embeddedDesc": "Run Termix with the built-in local server (no remote server needed)", "embeddedDesc": "Run Termix with the built-in local server (no remote server needed)",
"embeddedConnecting": "Connecting to local server...", "embeddedConnecting": "Connecting to local server...",
"embeddedNotReady": "Local server is not ready yet. Please wait a moment and try again." "embeddedNotReady": "Local server is not ready yet. Please wait a moment and try again.",
"localServer": "Local Server"
}, },
"versionCheck": { "versionCheck": {
"error": "Version Check Error", "error": "Version Check Error",