Enhance desktop window creation and logging
Some checks failed
farmcontrol/farmcontrol-server/pipeline/head There was a failure building this commit

- Updated electrobun.config.ts to conditionally disable ASAR packaging for macOS to improve module loading reliability.
- Added detailed logging in src/bun/index.js to track the startup process of the desktop host and services.
- Improved the createDesktopWindow function in src/desktop/window.js with enhanced logging and timeout handling for the webview's readiness, ensuring better visibility during the window creation process.
This commit is contained in:
Tom Butcher 2026-08-01 21:51:51 +01:00
parent 3107a517c3
commit 5f97ac2cff
3 changed files with 46 additions and 5 deletions

View File

@ -5,6 +5,13 @@ const packageJson = JSON.parse(readFileSync("./package.json", "utf8"));
const buildEnv = process.env.ELECTROBUN_BUILD_ENV || "dev";
const isStable = buildEnv === "stable";
const canCodesign = Boolean(process.env.ELECTROBUN_DEVELOPER_ID);
const targetOs =
process.env.ELECTROBUN_OS ||
(process.platform === "darwin"
? "macos"
: process.platform === "win32"
? "win"
: "linux");
const nativeExternals = [
"canvas",
@ -27,12 +34,19 @@ export default {
build: {
buildFolder: "build",
artifactFolder: "app_dist",
useAsar: isStable,
asarUnpack: ["*.node", "*.dll", "*.dylib", "*.so"],
// macOS WebKit loads views:// assets reliably from a flat app folder;
// ASAR-packed views can fail to load module scripts on first launch.
useAsar: isStable && targetOs !== "macos",
asarUnpack: [
"*.node",
"*.dll",
"*.dylib",
"*.so",
"views/**",
],
bun: {
entrypoint: "src/bun/index.js",
external: nativeExternals,
packages: "external",
},
copy: {
"dist/mainview": "views/mainview",

View File

@ -2,7 +2,11 @@ import { createDesktopWindow } from "../desktop/window.js";
import { setupIPC } from "../desktop/rpc.js";
import { init } from "../index.js";
console.log("[FarmControlServer] Starting desktop host...");
const mainWindow = await createDesktopWindow();
await setupIPC(mainWindow);
console.log("[FarmControlServer] Desktop window created, starting services...");
await init({ headless: false, skipWindow: true });
console.log("[FarmControlServer] Startup complete");

View File

@ -33,6 +33,7 @@ export async function createDesktopWindow() {
const rpc = createAppRpc();
startWaiting("Creating desktop window...", logger);
logger.info(`Loading main view: ${url}`);
const mainWindow = new BrowserWindow({
title: "Farm Control Server",
@ -49,11 +50,33 @@ export async function createDesktopWindow() {
});
registerMainWindow(mainWindow);
mainWindow.show();
return new Promise((resolve) => {
mainWindow.webview.on("dom-ready", async () => {
let settled = false;
const finish = async (reason) => {
if (settled) {
return;
}
settled = true;
clearTimeout(timeout);
logger.info(`Desktop window ready (${reason})`);
await stopWaiting();
resolve(mainWindow);
});
};
const timeout = setTimeout(() => {
logger.warn(
"Desktop window dom-ready timed out after 15s; continuing startup",
);
finish("timeout");
}, 15000);
mainWindow.webview.on("dom-ready", () => finish("dom-ready"));
mainWindow.webview.on("did-navigate", () => finish("did-navigate"));
mainWindow.webview.on("did-commit-navigation", () =>
finish("did-commit-navigation"),
);
});
}