Files
DTM_RTT_Tester/electron/main.cjs
T
2026-05-18 17:36:05 +09:00

80 lines
2.2 KiB
JavaScript

let electronMain;
try {
electronMain = require('electron/main');
} catch {
electronMain = require('electron');
}
const { app, BrowserWindow, ipcMain, Menu } = electronMain;
const path = require('path');
const {
listJLinks,
startTest,
stopTest,
getStatus,
syncSessionConfig,
canStartSession,
stopAllSessions,
} = require('./services/dtmController.cjs');
let mainWindow;
const createWindow = async () => {
mainWindow = new BrowserWindow({
width: 1500,
height: 980,
minWidth: 1180,
minHeight: 760,
backgroundColor: '#f3f0e8',
webPreferences: {
preload: path.join(__dirname, 'preload.cjs'),
contextIsolation: true,
nodeIntegration: false,
},
});
const devServerUrl = process.env.VITE_DEV_SERVER_URL;
if (devServerUrl) {
await mainWindow.loadURL(devServerUrl);
mainWindow.webContents.openDevTools({ mode: 'detach' });
} else {
await mainWindow.loadFile(path.join(app.getAppPath(), 'dist', 'index.html'));
}
};
ipcMain.handle('jlink:list', async () => listJLinks());
ipcMain.handle('serial:list', async () => listJLinks());
ipcMain.handle('dtm:status', async (_, sessionId) => getStatus(sessionId));
ipcMain.handle('dtm:stop', async (_, sessionId) => stopTest(sessionId));
ipcMain.handle('dtm:sync-config', async (_, sessionId, config) => syncSessionConfig(sessionId, config));
ipcMain.handle('dtm:can-start', async (_, sessionId, config) => canStartSession(sessionId, config));
ipcMain.handle('dtm:start', async (_, sessionId, config) =>
startTest(sessionId, config, event => {
if (!mainWindow || mainWindow.isDestroyed()) return;
mainWindow.webContents.send('dtm:event', event);
})
);
app.whenReady().then(() => {
Menu.setApplicationMenu(null);
return createWindow();
});
app.on('before-quit', () => {
stopAllSessions().catch(() => {});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow().catch(console.error);
}
});