Files
2026-01-27 15:48:29 +07:00

73 lines
1.8 KiB
JavaScript

const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const isDev = process.env.NODE_ENV === 'development';
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 800,
minHeight: 600,
icon: path.join(__dirname, 'public', 'icon.png'),
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
preload: path.join(__dirname, 'preload.js'),
},
autoHideMenuBar: true,
titleBarStyle: 'default',
backgroundColor: '#ffffff',
});
// Load the app
if (isDev) {
// Development: load from Next.js dev server
mainWindow.loadURL('http://localhost:3000');
mainWindow.webContents.openDevTools();
} else {
// Production: load from built files
// In packaged app, files are in resources/out or app.asar
const outPath = path.join(__dirname, '..', 'out', 'index.html');
const appPath = path.join(__dirname, 'out', 'index.html');
const filePath = require('fs').existsSync(outPath) ? outPath : appPath;
mainWindow.loadFile(filePath);
}
mainWindow.on('closed', () => {
mainWindow = null;
});
// Handle external links
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
require('electron').shell.openExternal(url);
return { action: 'deny' };
});
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// Handle app info requests
ipcMain.handle('get-app-info', () => {
return {
name: app.getName(),
version: app.getVersion(),
isElectron: true,
};
});