diff --git a/main.js b/main.js index ad065359..2bd1fb9a 100644 --- a/main.js +++ b/main.js @@ -1,64 +1,78 @@ -const { app, BrowserWindow } = require('electron/main') +const { app, BrowserWindow, dialog } = require('electron/main'); -function createWindow () { +function createWindow() { const mainWindow = new BrowserWindow({ width: 1280, height: 760, autoHideMenuBar: true - }) + }); - mainWindow.webContents.session.on('select-serial-port', (event, portList, webContents, callback) => { - // Add listeners to handle ports being added or removed before the callback for `select-serial-port` - // is called. + mainWindow.webContents.session.on('select-serial-port', async (event, portList, webContents, callback) => { + // Add listeners to handle ports being added or removed before the callback for `select-serial-port` is called. mainWindow.webContents.session.on('serial-port-added', (event, port) => { - console.log('serial-port-added FIRED WITH', port) + console.log('serial-port-added FIRED WITH', port); // Optionally update portList to add the new port - }) + }); mainWindow.webContents.session.on('serial-port-removed', (event, port) => { - console.log('serial-port-removed FIRED WITH', port) + console.log('serial-port-removed FIRED WITH', port); // Optionally update portList to remove the port - }) + }); + + event.preventDefault(); - event.preventDefault() if (portList && portList.length > 0) { - console.log(portList[portList.length - 1]) - callback(portList[portList.length - 1].portId) + // Only keep the last 5 ports + const lastFivePorts = portList.slice(-5); + + // Prepare options for dialog box + const options = { + type: 'question', + buttons: lastFivePorts.map(port => port.portName), // Display port names as choices + title: 'Select Serial Port', + message: 'Please select a serial port to use:' + }; + + const result = await dialog.showMessageBox(mainWindow, options); + if (result.response >= 0) { + callback(lastFivePorts[result.response].portId); // Callback with the selected port ID + } else { + callback(''); // No port selected + } } else { - // eslint-disable-next-line n/no-callback-literal - callback('') // Could not find any matching devices + callback(''); // No ports available } - }) + }); mainWindow.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => { if (permission === 'serial' && details.securityOrigin === 'file:///') { - return true + return true; } - return false - }) + return false; + }); mainWindow.webContents.session.setDevicePermissionHandler((details) => { if (details.deviceType === 'serial' && details.origin === 'file://') { - return true + return true; } - return false - }) + return false; + }); - mainWindow.loadFile('./dist/index.html') + mainWindow.loadFile('./dist/index.html'); - // mainWindow.webContents.openDevTools() + // mainWindow.webContents.openDevTools(); } app.whenReady().then(() => { - createWindow() + createWindow(); app.on('activate', function () { - if (BrowserWindow.getAllWindows().length === 0) createWindow() - }) -}) + if (BrowserWindow.getAllWindows().length === 0) createWindow(); + }); +}); app.on('window-all-closed', function () { - if (process.platform !== 'darwin') app.quit() -}) \ No newline at end of file + if (process.platform !== 'darwin') app.quit(); +});