-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathelectron.js
More file actions
64 lines (53 loc) · 1.56 KB
/
Copy pathelectron.js
File metadata and controls
64 lines (53 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const { app, BrowserWindow } = require("electron");
const path = require("path");
const { spawn } = require("child_process");
let backendProcess = null;
function startBackend() {
if (app.isPackaged) {
const ext = process.platform === 'win32' ? '.exe' : '';
const backendPath = path.join(process.resourcesPath, "bin", `api-backend${ext}`);
backendProcess = spawn(backendPath, [], {
stdio: 'ignore'
});
backendProcess.on('error', (err) => {
console.error('Failed to start backend process.', err);
});
} else {
console.log("Running in development mode. Assuming backend is running via Docker Desktop.");
}
}
function createWindow() {
const win = new BrowserWindow({
width: 1100,
height: 800,
webPreferences: {
preload: path.join(__dirname, "preload.js"),
},
});
// Allow microphone capture for the local speech-to-text recorder. Audio is
// only ever sent to the local Whisper service — nothing leaves the machine.
win.webContents.session.setPermissionRequestHandler(
(webContents, permission, callback) => {
callback(permission === "media");
}
);
win.loadFile("index.html");
if (!app.isPackaged) {
win.webContents.openDevTools();
}
}
app.whenReady().then(() => {
startBackend();
createWindow();
});
app.on("will-quit", () => {
if (backendProcess) {
backendProcess.kill();
}
});
app.on("window-all-closed", () => {
if (process.platform !== "darwin") app.quit();
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});