Enhance desktop window creation and logging
Some checks failed
farmcontrol/farmcontrol-server/pipeline/head There was a failure building this commit
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:
parent
3107a517c3
commit
5f97ac2cff
@ -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",
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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"),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user