import { app, desktopCapturer, ipcMain, shell } from 'electron'; import * as fs from 'fs'; import * as fsp from 'fs/promises'; export function setupSystemHandlers(): void { ipcMain.handle('open-external', async (_event, url: string) => { if (typeof url === 'string' && (url.startsWith('http://') || url.startsWith('https://'))) { await shell.openExternal(url); return true; } return false; }); ipcMain.handle('get-sources', async () => { const sources = await desktopCapturer.getSources({ types: ['window', 'screen'], thumbnailSize: { width: 150, height: 150 } }); return sources.map((source) => ({ id: source.id, name: source.name, thumbnail: source.thumbnail.toDataURL() })); }); ipcMain.handle('get-app-data-path', () => app.getPath('userData')); ipcMain.handle('file-exists', async (_event, filePath: string) => { try { await fsp.access(filePath, fs.constants.F_OK); return true; } catch { return false; } }); ipcMain.handle('read-file', async (_event, filePath: string) => { const data = await fsp.readFile(filePath); return data.toString('base64'); }); ipcMain.handle('write-file', async (_event, filePath: string, base64Data: string) => { const buffer = Buffer.from(base64Data, 'base64'); await fsp.writeFile(filePath, buffer); return true; }); ipcMain.handle('ensure-dir', async (_event, dirPath: string) => { await fsp.mkdir(dirPath, { recursive: true }); return true; }); }