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 buildEnv = process.env.ELECTROBUN_BUILD_ENV || "dev";
|
||||||
const isStable = buildEnv === "stable";
|
const isStable = buildEnv === "stable";
|
||||||
const canCodesign = Boolean(process.env.ELECTROBUN_DEVELOPER_ID);
|
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 = [
|
const nativeExternals = [
|
||||||
"canvas",
|
"canvas",
|
||||||
@ -27,12 +34,19 @@ export default {
|
|||||||
build: {
|
build: {
|
||||||
buildFolder: "build",
|
buildFolder: "build",
|
||||||
artifactFolder: "app_dist",
|
artifactFolder: "app_dist",
|
||||||
useAsar: isStable,
|
// macOS WebKit loads views:// assets reliably from a flat app folder;
|
||||||
asarUnpack: ["*.node", "*.dll", "*.dylib", "*.so"],
|
// ASAR-packed views can fail to load module scripts on first launch.
|
||||||
|
useAsar: isStable && targetOs !== "macos",
|
||||||
|
asarUnpack: [
|
||||||
|
"*.node",
|
||||||
|
"*.dll",
|
||||||
|
"*.dylib",
|
||||||
|
"*.so",
|
||||||
|
"views/**",
|
||||||
|
],
|
||||||
bun: {
|
bun: {
|
||||||
entrypoint: "src/bun/index.js",
|
entrypoint: "src/bun/index.js",
|
||||||
external: nativeExternals,
|
external: nativeExternals,
|
||||||
packages: "external",
|
|
||||||
},
|
},
|
||||||
copy: {
|
copy: {
|
||||||
"dist/mainview": "views/mainview",
|
"dist/mainview": "views/mainview",
|
||||||
|
|||||||
@ -2,7 +2,11 @@ import { createDesktopWindow } from "../desktop/window.js";
|
|||||||
import { setupIPC } from "../desktop/rpc.js";
|
import { setupIPC } from "../desktop/rpc.js";
|
||||||
import { init } from "../index.js";
|
import { init } from "../index.js";
|
||||||
|
|
||||||
|
console.log("[FarmControlServer] Starting desktop host...");
|
||||||
|
|
||||||
const mainWindow = await createDesktopWindow();
|
const mainWindow = await createDesktopWindow();
|
||||||
await setupIPC(mainWindow);
|
await setupIPC(mainWindow);
|
||||||
|
|
||||||
|
console.log("[FarmControlServer] Desktop window created, starting services...");
|
||||||
await init({ headless: false, skipWindow: true });
|
await init({ headless: false, skipWindow: true });
|
||||||
|
console.log("[FarmControlServer] Startup complete");
|
||||||
|
|||||||
@ -33,6 +33,7 @@ export async function createDesktopWindow() {
|
|||||||
const rpc = createAppRpc();
|
const rpc = createAppRpc();
|
||||||
|
|
||||||
startWaiting("Creating desktop window...", logger);
|
startWaiting("Creating desktop window...", logger);
|
||||||
|
logger.info(`Loading main view: ${url}`);
|
||||||
|
|
||||||
const mainWindow = new BrowserWindow({
|
const mainWindow = new BrowserWindow({
|
||||||
title: "Farm Control Server",
|
title: "Farm Control Server",
|
||||||
@ -49,11 +50,33 @@ export async function createDesktopWindow() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
registerMainWindow(mainWindow);
|
registerMainWindow(mainWindow);
|
||||||
|
mainWindow.show();
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
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();
|
await stopWaiting();
|
||||||
resolve(mainWindow);
|
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