Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions apps/desktop/src/lib/window-loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,21 @@ export function registerRoute(props: {
if (isDev) {
// Development: load from Vite dev server with hash routing
const url = `http://localhost:${PORTS.VITE_DEV_SERVER}/#/`;
props.browserWindow.loadURL(url);
console.log(`[window-loader] Loading dev URL: ${url}`);
props.browserWindow.loadURL(url).catch((error) => {
console.error("[window-loader] Failed to load dev URL:", error);
});
} else {
// Production: load from custom protocol with hash routing
// Origin becomes: superset://app (trusted by Better Auth)
const fileName = props.htmlFile.split("/").pop() || "index.html";
// Split on both forward and back slashes for cross-platform compatibility
const fileName = props.htmlFile.split(/[/\\]/).pop() || "index.html";
const url = `${PROTOCOL_SCHEME}://app/${fileName}#/`;
props.browserWindow.loadURL(url);
console.log(`[window-loader] Loading production URL: ${url}`);
console.log(`[window-loader] HTML file path: ${props.htmlFile}`);
props.browserWindow.loadURL(url).catch((error) => {
console.error("[window-loader] Failed to load production URL:", error);
console.error("[window-loader] Attempted URL:", url);
});
}
}
11 changes: 11 additions & 0 deletions apps/desktop/src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,13 +211,24 @@ if (!gotTheLock) {
// Register custom protocol to serve app files in production
// This provides a stable origin (superset://app or superset-dev://app) for Better Auth CORS
if (process.env.NODE_ENV !== "development") {
console.log(
`[main] Registering protocol handler for: ${PROTOCOL_SCHEME}`,
);
console.log(`[main] __dirname: ${__dirname}`);
console.log(
`[main] Renderer path: ${path.join(__dirname, "../renderer")}`,
);

protocol.handle(PROTOCOL_SCHEME, (request) => {
// Parse URL to extract pathname (e.g., superset://app/index.html#/ -> /index.html)
const parsedUrl = new URL(request.url);
const pathname = parsedUrl.pathname;
const filePath = path.normalize(
path.join(__dirname, "../renderer", pathname),
);
console.log(`[protocol] Request: ${request.url}`);
console.log(`[protocol] Pathname: ${pathname}`);
console.log(`[protocol] Resolved file path: ${filePath}`);
return net.fetch(`file://${filePath}`);
});
}
Expand Down
23 changes: 23 additions & 0 deletions apps/desktop/src/main/windows/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,36 @@ export async function MainWindow() {
);

window.webContents.on("did-finish-load", async () => {
console.log("[main-window] Renderer loaded successfully");
// Restore maximized state if it was saved
if (initialBounds.isMaximized) {
window.maximize();
}
window.show();
});

window.webContents.on(
"did-fail-load",
(_event, errorCode, errorDescription, validatedURL) => {
console.error("[main-window] Failed to load renderer:");
console.error(` Error code: ${errorCode}`);
console.error(` Description: ${errorDescription}`);
console.error(` URL: ${validatedURL}`);
// Show the window anyway so user can see something is wrong
window.show();
},
);

window.webContents.on("render-process-gone", (_event, details) => {
console.error("[main-window] Renderer process gone:", details);
});

window.webContents.on("preload-error", (_event, preloadPath, error) => {
console.error("[main-window] Preload script error:");
console.error(` Path: ${preloadPath}`);
console.error(` Error:`, error);
});

window.on("close", () => {
// Save window state first, before any cleanup
const isMaximized = window.isMaximized();
Expand Down
Loading