diff --git a/electron/main.cjs b/electron/main.cjs index aceef2c9..4e34f161 100644 --- a/electron/main.cjs +++ b/electron/main.cjs @@ -423,6 +423,7 @@ app.commandLine.appendSwitch("--enable-features=NetworkService"); let mainWindow = null; let backendProcess = null; +let backendStartFailed = false; let tray = null; let isQuitting = false; @@ -657,6 +658,9 @@ function startBackendServer() { backendProcess.on("exit", (code, signal) => { logToFile(`Backend process exited with code ${code}, signal ${signal}`); + if (!resolved && code !== 0) { + backendStartFailed = true; + } backendProcess = null; if (!resolved) { resolved = true; @@ -1092,7 +1096,7 @@ ipcMain.handle("get-platform", () => { ipcMain.handle("get-embedded-server-status", () => { return { - running: backendProcess !== null && !backendProcess.killed, + running: backendProcess !== null && !backendProcess.killed && !backendStartFailed, embedded: !isDev, dataDir: isDev ? null : getBackendDataDir(), }; diff --git a/src/backend/database/database.ts b/src/backend/database/database.ts index 01a109ff..0c1ec5f7 100644 --- a/src/backend/database/database.ts +++ b/src/backend/database/database.ts @@ -2021,12 +2021,15 @@ httpServer.on("error", (err: NodeJS.ErrnoException) => { throw err; }); -httpServer.listen(HTTP_PORT, async () => { - if (!fs.existsSync(uploadsDir)) { - fs.mkdirSync(uploadsDir, { recursive: true }); - } +export const serverReady = new Promise((resolve) => { + httpServer.listen(HTTP_PORT, async () => { + if (!fs.existsSync(uploadsDir)) { + fs.mkdirSync(uploadsDir, { recursive: true }); + } - await initializeSecurity(); + await initializeSecurity(); + resolve(); + }); }); const sslConfig = AutoSSLSetup.getSSLConfig(); diff --git a/src/backend/starter.ts b/src/backend/starter.ts index 7685a7dc..a6d8aed8 100644 --- a/src/backend/starter.ts +++ b/src/backend/starter.ts @@ -137,7 +137,8 @@ import { }, ); - await import("./database/database.js"); + const dbServer = await import("./database/database.js"); + await (dbServer as unknown as { serverReady: Promise }).serverReady; await import("./ssh/terminal.js"); await import("./ssh/tunnel.js"); await import("./ssh/file-manager.js"); diff --git a/src/ui/auth/ElectronLoginForm.tsx b/src/ui/auth/ElectronLoginForm.tsx index 9824a30f..affa510e 100644 --- a/src/ui/auth/ElectronLoginForm.tsx +++ b/src/ui/auth/ElectronLoginForm.tsx @@ -143,14 +143,11 @@ export function ElectronLoginForm({ {t("serverConfig.changeServer")} - {!isEmbeddedServer && ( -
- - {displayUrl} - -
- )} - {isEmbeddedServer &&
} +
+ + {isEmbeddedServer ? t("serverConfig.localServer") : displayUrl} + +