diff --git a/packages/electron-app/electron/main/main.ts b/packages/electron-app/electron/main/main.ts index 09263b6a..4b31cc9a 100644 --- a/packages/electron-app/electron/main/main.ts +++ b/packages/electron-app/electron/main/main.ts @@ -1,7 +1,7 @@ import { app, BrowserView, BrowserWindow, nativeImage, session, shell } from "electron" import http from "node:http" import https from "node:https" -import { existsSync, mkdirSync } from "fs" +import { existsSync, mkdirSync, rmSync } from "fs" import { dirname, join } from "path" import { fileURLToPath } from "url" import { createApplicationMenu } from "./menu" @@ -39,6 +39,49 @@ function configureDevStoragePaths() { configureDevStoragePaths() +function configurePackagedStoragePaths() { + if (!app.isPackaged) { + return + } + + try { + const sessionDataPath = join(app.getPath("userData"), "session-data-v2") + mkdirSync(sessionDataPath, { recursive: true }) + app.setPath("sessionData", sessionDataPath) + } catch (error) { + console.warn("[electron-startup] failed to configure packaged session data path", error) + } +} + +configurePackagedStoragePaths() + +function cleanupPackagedChromiumStorage() { + if (!app.isPackaged) { + return + } + + const roots = [app.getPath("sessionData"), app.getPath("userData"), join(app.getPath("userData"), "session-data")] + const names = ["Service Worker", "QuotaManager", "QuotaManager-journal"] + + for (const root of roots) { + for (const name of names) { + const candidate = join(root, name) + if (!existsSync(candidate)) { + continue + } + + try { + rmSync(candidate, { recursive: true, force: true }) + console.info("[electron-startup] removed stale Chromium storage", candidate) + } catch (error) { + console.warn("[electron-startup] failed to remove stale Chromium storage", candidate, error) + } + } + } +} + +cleanupPackagedChromiumStorage() + const cliManager = new CliProcessManager() let mainWindow: BrowserWindow | null = null let currentCliUrl: string | null = null @@ -129,7 +172,8 @@ function isIgnorableNavigationError(error: unknown): boolean { } const code = "code" in error ? String((error as { code?: unknown }).code ?? "") : "" - return code === "ERR_ABORTED" || code === "ERR_FAILED" + const message = "message" in error ? String((error as { message?: unknown }).message ?? "") : "" + return code === "ERR_ABORTED" || code === "ERR_FAILED" || message.includes("ERR_ABORTED") || message.includes("ERR_FAILED") } function getAllowedRendererOrigins(window?: BrowserWindow | null): string[] {