import { createWindow } from './createWindow'; import { ipcMain, BrowserWindow } from "electron"; import { initSession, sendMessage } from './session'; import { windowEmitter } from './windowEmitter'; const portAudio = require('naudiodon'); interface ipcRendererPayload { endpoint: string; message: any; } let activeSession = false; let win: BrowserWindow | null; windowEmitter.on('ipc-renderer', (payload: ipcRendererPayload) => { if (win) win.webContents.send(payload.endpoint, { message: payload.message }); }); /* * The main function will be run after electron app is ready. */ export async function main() { // create main window. if (!win) { win = await createWindow({ width: 350, height: 525, resizable: false }); } // Instantiate socket session with crimata-platorm. if (!activeSession) { initSession(); } activeSession = true; const handleMessage = (event: any, arg: any) => { sendMessage(arg); } const windowMount = (): void => { windowEmitter.emit('window-active', true); ipcMain.on('send-message', handleMessage); } const windowDismount = (): void => { win = null; windowEmitter.emit('window-active', false); ipcMain.removeAllListeners('send-message'); } // Handle window mount and dismount. win.webContents.on('did-finish-load', windowMount); win.on("closed", windowDismount); // TODO: FIX recorder restart bug // let audioInput: string[] = []; // const updateRecorder = async (Event: any, record: boolean): void => { // if (record) { // ia.resume(); // } else { // ia.pause(); // const audio = processAudio(audioInput); // sendAudio(audio); // audioInput = []; // } // } // function processAudio(audioInput: Array): Buffer { // let audio = ''; // audioInput.forEach(chunk => audio += chunk); // return Buffer.from(audio, "base64"); // } // const ia = new portAudio.AudioIO({ // inOptions: { // channelCount: 1, // sampleFormat: 16, // sampleRate: 16000, // deviceId: -1, // closeOnError: false, // } // }); // ia.setEncoding('base64'); // ia.start(); // ia.pause(); // ia.on('error', (e: Error) => { // console.log('Error recording audio', + e); // }); // ia.on('data', (chunk: string) => { // audioInput.push(chunk); // }); }