diff --git a/electron-builder.json b/electron-builder.json index 845f808a..f3cdaf41 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -6,7 +6,12 @@ "output": "release" }, "asar": true, - "asarUnpack": ["dist/backend/**/*", "node_modules/**/*"], + "asarUnpack": [ + "dist/backend/**/*", + "node_modules/**/*", + "public/icons/**/*", + "public/icon.*" + ], "files": [ "dist/**/*", "electron/**/*", diff --git a/electron/main.cjs b/electron/main.cjs index 8813f784..d536bdfd 100644 --- a/electron/main.cjs +++ b/electron/main.cjs @@ -709,15 +709,21 @@ function createTray() { try { const { nativeImage } = require("electron"); + // Native APIs (Tray, nativeImage) can't load files from inside app.asar — + // use the unpacked path so the OS sees a real file. + const publicRoot = isDev + ? path.join(appRoot, "public") + : path.join(appRoot.replace("app.asar", "app.asar.unpacked"), "public"); + let trayIcon; if (process.platform === "darwin") { - const iconPath = path.join(appRoot, "public", "icons", "16x16.png"); + const iconPath = path.join(publicRoot, "icons", "16x16.png"); trayIcon = nativeImage.createFromPath(iconPath); trayIcon.setTemplateImage(true); } else if (process.platform === "win32") { - trayIcon = path.join(appRoot, "public", "icon.ico"); + trayIcon = path.join(publicRoot, "icon.ico"); } else { - trayIcon = path.join(appRoot, "public", "icons", "32x32.png"); + trayIcon = path.join(publicRoot, "icons", "32x32.png"); } tray = new Tray(trayIcon); diff --git a/src/backend/database/database.ts b/src/backend/database/database.ts index 03140c1f..a0e95ece 100644 --- a/src/backend/database/database.ts +++ b/src/backend/database/database.ts @@ -61,9 +61,11 @@ const authenticateJWT = authManager.createAuthMiddleware(); const requireAdmin = authManager.createAdminMiddleware(); app.use(createCorsMiddleware()); +const uploadsDir = path.join(process.env.DATA_DIR || "./db/data", "uploads"); + const storage = multer.diskStorage({ destination: (req, file, cb) => { - cb(null, "uploads/"); + cb(null, uploadsDir); }, filename: (req, file, cb) => { const timestamp = Date.now(); @@ -2018,7 +2020,6 @@ httpServer.on("error", (err: NodeJS.ErrnoException) => { }); httpServer.listen(HTTP_PORT, async () => { - const uploadsDir = path.join(process.cwd(), "uploads"); if (!fs.existsSync(uploadsDir)) { fs.mkdirSync(uploadsDir, { recursive: true }); }