botui/src/main/main.ts

78 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-10-26 16:26:11 -03:00
require('dotenv').config();
2024-10-26 13:05:56 -03:00
import { app, BrowserWindow, ipcMain } from 'electron';
import * as path from 'path';
2024-10-26 16:26:11 -03:00
// In main.ts
import { systemPreferences } from 'electron';
2024-10-26 13:05:56 -03:00
import { RecorderService } from '../services/recorder.service';
import { PlayerService } from '../services/player.service';
const recorder = new RecorderService();
const player = new PlayerService();
function createWindow() {
const mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
preload: path.join(__dirname, '../preload/preload.js')
}
});
if (process.env.NODE_ENV === 'development') {
mainWindow.loadURL('http://localhost:8080');
mainWindow.webContents.openDevTools();
} else {
mainWindow.loadFile(path.join(__dirname, '../../src/renderer/index.html'));
}
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
ipcMain.handle('mouse-event', recorder.mouseHandleEvent.bind(recorder));
ipcMain.handle('keyboard-event', recorder.keyboardHandleEvent.bind(recorder));
ipcMain.handle('screenshot-captured', recorder.screenshotHandleEvent.bind(recorder));
ipcMain.handle('start-recording', async () => {
await recorder.startRecording();
});
ipcMain.handle('stop-recording', async () => {
return await recorder.stopRecording();
});
ipcMain.handle('execute-basic-code', async (_, code: string) => {
await player.executeBasicCode(code);
});
2024-10-26 16:26:11 -03:00
// Add microphone permission check for macOS
ipcMain.handle('check-microphone-permission', async () => {
if (process.platform === 'darwin') {
const status = await systemPreferences.getMediaAccessStatus('microphone');
if (status !== 'granted') {
const success = await systemPreferences.askForMediaAccess('microphone');
return success;
}
return true;
}
// On Windows/Linux, permissions are handled by the OS
return true;
});
// Enable required permissions
app.commandLine.appendSwitch('enable-speech-dispatcher');