Files
goodgarden/app.js
2024-03-19 11:06:15 +01:00

117 lines
2.7 KiB
JavaScript

const { app, BrowserWindow, ipcMain } = require('electron');
const express = require('express');
const bodyParser = require('body-parser');
const { PythonShell } = require('python-shell');
const path = require('path');
const urlElectron = path.join(__dirname, "src/index.html");
// Create an Express app
const server = express();
server.use(bodyParser.urlencoded({ extended: true }));
// Define a route for form POST requests
server.post('/submit-form', (req, res) =>
{
const { plant_naam, plantensoort } = req.body;
const plant_geteelt = req.body.plant_geteelt == 'true' ? 'true' : 'false';
let options =
{
mode: 'text',
args: [plant_naam, plantensoort, plant_geteelt]
};
// Execute Python script with plant name as an argument
PythonShell.run('./script/db_connect_form.py', options, (err, results) =>
{
if (err)
{
console.error(err);
res.send('Er is een fout opgetreden');
}
else
{
console.log('Python script uitvoering resultaten:', results);
res.send('Formulier succesvol verwerkt');
}
});
});
// Start the server
const PORT = 3000;
server.listen(PORT, () =>
{
console.log(`Server is listening on port ${PORT}`);
});
let mainWindow;
// Create the Electron application window
function createWindow()
{
mainWindow = new BrowserWindow(
{
width: 1280,
height: 800,
frame: false,
webPreferences:
{
nodeIntegration: true,
contextIsolation: false,
enableRemoteModule: true,
webSecurity: true,
}
});
mainWindow.loadFile(path.join(__dirname, 'src', 'py', 'templates', 'index.html'));
// IPC event listeners for running Python scripts and updating HTML data
setupIpcMainListeners();
}
// Start the Electron app
app.whenReady().then(createWindow);
// Close the app when all windows are closed, except on macOS
app.on('window-all-closed', () =>
{
if (process.platform !== 'darwin')
{
app.quit();
}
});
// Re-create a window in the app when the dock icon is clicked and there are no other windows open.
app.on('activate', () =>
{
if (BrowserWindow.getAllWindows().length === 0)
{
createWindow();
}
});
function setupIpcMainListeners()
{
ipcMain.on('run-python-script', (event, args) =>
{
let options =
{
mode: 'text',
args: args,
};
// The actual script path and event replies should be tailored to your application's needs
});
ipcMain.on('request-update-data', (event, args) =>
{
const databaseData = { timestamp: "2022-01-01", gateway_receive_time: "2022-01-01", device: "Device1", value: 50 };
event.reply('update-data-result', { databaseData });
});
ipcMain.on('update-html-data', (event, data) =>
{
mainWindow.webContents.send('update-html-data', data);
});
}