Skip to content

Commit 172a43d

Browse files
committed
feat(electron): configure blcu
1 parent 51297ee commit 172a43d

2 files changed

Lines changed: 92 additions & 1 deletion

File tree

electron-app/main.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { getConfigManager } from "./src/config/configInstance.js";
1010
import { setupIpcHandlers } from "./src/ipc/handlers.js";
1111
import { startBackend, stopBackend } from "./src/processes/backend.js";
1212
import { stopPacketSender } from "./src/processes/packetSender.js";
13+
import { startBlcuProgramming, stopBlcuProgramming } from "./src/processes/blcuProgramming.js";
1314
import { logger } from "./src/utils/logger.js";
1415
import { createLogWindow } from "./src/windows/logWindow.js";
1516
import { createWindow } from "./src/windows/mainWindow.js";
@@ -42,6 +43,13 @@ app.whenReady().then(async () => {
4243
// Start backend already shows these errors
4344
}
4445

46+
try {
47+
await startBlcuProgramming(logWindow);
48+
logger.electron.header("BLCU programming process spawned");
49+
} catch (error) {
50+
logger.electron.error("Failed to start BLCU programming:", error);
51+
}
52+
4553
// Create main application window
4654
const mainWindow = createWindow(screenWidth, screenHeight);
4755
mainWindow.maximize();
@@ -100,7 +108,7 @@ app.on("window-all-closed", () => {
100108
// Cleanup before app quits
101109
app.on("before-quit", (e) => {
102110
e.preventDefault();
103-
Promise.all([stopBackend(), stopPacketSender()])
111+
Promise.all([stopBackend(), stopPacketSender(), stopBlcuProgramming()])
104112
.catch((error) => logger.electron.error("Error during shutdown:", error))
105113
.finally(() => app.exit());
106114
});
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { spawn } from "child_process";
2+
import fs from "fs";
3+
import path from "path";
4+
import { logger } from "../utils/logger.js";
5+
import { getAppPath } from "../utils/paths.js";
6+
7+
let blcuProgrammingProcess = null;
8+
9+
function getBlcuProgrammingRepoPath() {
10+
return path.join(getAppPath(), "..", "blcu-programming");
11+
}
12+
13+
function getPythonExecutable(repoPath) {
14+
if (process.platform === "win32") {
15+
return path.join(repoPath, ".venv", "Scripts", "python.exe");
16+
}
17+
18+
return path.join(repoPath, ".venv", "bin", "python");
19+
}
20+
21+
async function startBlcuProgramming() {
22+
if (blcuProgrammingProcess && !blcuProgrammingProcess.killed) {
23+
return blcuProgrammingProcess;
24+
}
25+
26+
const repoPath = getBlcuProgrammingRepoPath();
27+
const pythonBin = getPythonExecutable(repoPath);
28+
const entrypointPath = path.join(repoPath, "api", "main.py");
29+
30+
if (!fs.existsSync(entrypointPath)) {
31+
logger.process(
32+
"BLCU Programming",
33+
`Entrypoint not found at ${entrypointPath}`,
34+
);
35+
return null;
36+
}
37+
38+
if (!fs.existsSync(pythonBin)) {
39+
logger.process(
40+
"BLCU Programming",
41+
`Python executable not found at ${pythonBin}`,
42+
);
43+
return null;
44+
}
45+
46+
blcuProgrammingProcess = spawn(
47+
pythonBin,
48+
["-m", "uvicorn", "api.main:app"],
49+
{
50+
cwd: repoPath,
51+
env: {
52+
...process.env,
53+
PYTHONUNBUFFERED: "1",
54+
},
55+
},
56+
);
57+
58+
blcuProgrammingProcess.stdout.on("data", (data) => {
59+
logger.process("BLCU Programming", data.toString().trim());
60+
});
61+
62+
blcuProgrammingProcess.stderr.on("data", (data) => {
63+
logger.process("BLCU Programming", data.toString().trim());
64+
});
65+
66+
blcuProgrammingProcess.on("close", (code) => {
67+
logger.process("BLCU Programming", `Process exited with code ${code}`);
68+
blcuProgrammingProcess = null;
69+
});
70+
71+
return blcuProgrammingProcess;
72+
}
73+
74+
async function stopBlcuProgramming() {
75+
if (!blcuProgrammingProcess || blcuProgrammingProcess.killed) {
76+
return;
77+
}
78+
79+
blcuProgrammingProcess.kill("SIGTERM");
80+
blcuProgrammingProcess = null;
81+
}
82+
83+
export { startBlcuProgramming, stopBlcuProgramming };

0 commit comments

Comments
 (0)