110 lines
2.8 KiB
JavaScript
110 lines
2.8 KiB
JavaScript
const { app, BrowserWindow, ipcMain, dialog, shell } = require('electron');
|
|
const path = require('path');
|
|
const ConfigManager = require('./config');
|
|
|
|
let mainWindow;
|
|
let config;
|
|
|
|
function createWindow() {
|
|
// Инициализируем конфигурацию
|
|
config = new ConfigManager();
|
|
|
|
// Получаем сохраненные размеры окна
|
|
const bounds = config.getWindowBounds();
|
|
|
|
mainWindow = new BrowserWindow({
|
|
width: bounds.width,
|
|
height: bounds.height,
|
|
x: bounds.x,
|
|
y: bounds.y,
|
|
webPreferences: {
|
|
nodeIntegration: true,
|
|
contextIsolation: false,
|
|
webSecurity: false // Needed for WebRTC
|
|
},
|
|
icon: path.join(__dirname, '../assets/icon.png'),
|
|
title: 'GodEye Operator Console',
|
|
show: false,
|
|
minWidth: 1200,
|
|
minHeight: 800
|
|
});
|
|
|
|
mainWindow.loadFile('src/renderer/index.html');
|
|
|
|
// Show window when ready to prevent visual flash
|
|
mainWindow.once('ready-to-show', () => {
|
|
mainWindow.show();
|
|
|
|
// Передаем конфигурацию в renderer процесс
|
|
mainWindow.webContents.send('config-loaded', {
|
|
serverUrl: config.getServerUrl(),
|
|
autoConnect: config.getAutoConnect(),
|
|
videoFilters: config.getVideoFilters()
|
|
});
|
|
});
|
|
|
|
// Сохраняем размеры окна при изменении
|
|
mainWindow.on('resize', saveWindowBounds);
|
|
mainWindow.on('move', saveWindowBounds);
|
|
|
|
// Open DevTools in development
|
|
if (process.argv.includes('--dev')) {
|
|
mainWindow.webContents.openDevTools();
|
|
}
|
|
|
|
mainWindow.on('closed', () => {
|
|
mainWindow = null;
|
|
});
|
|
|
|
// Обработка внешних ссылок
|
|
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
|
|
shell.openExternal(url);
|
|
return { action: 'deny' };
|
|
});
|
|
}
|
|
|
|
function saveWindowBounds() {
|
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
const bounds = mainWindow.getBounds();
|
|
config.setWindowBounds(bounds);
|
|
}
|
|
}
|
|
|
|
// IPC обработчики
|
|
ipcMain.handle('get-config', (event, key) => {
|
|
return config.get(key);
|
|
});
|
|
|
|
ipcMain.handle('set-config', (event, key, value) => {
|
|
config.set(key, value);
|
|
return true;
|
|
});
|
|
|
|
ipcMain.handle('show-save-dialog', async (event, options) => {
|
|
const result = await dialog.showSaveDialog(mainWindow, options);
|
|
return result;
|
|
});
|
|
|
|
ipcMain.handle('show-message-box', async (event, options) => {
|
|
const result = await dialog.showMessageBox(mainWindow, options);
|
|
return result;
|
|
});
|
|
|
|
app.whenReady().then(createWindow);
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') {
|
|
app.quit();
|
|
}
|
|
});
|
|
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow();
|
|
}
|
|
});
|
|
|
|
// IPC handlers for main process communication
|
|
ipcMain.handle('app-version', () => {
|
|
return app.getVersion();
|
|
}); |