Files
YG-Datasets/easy-dataset-main/electron/main.js

84 lines
2.5 KiB
JavaScript

const { app, dialog, ipcMain } = require('electron');
const { setupLogging, setupIpcLogging } = require('./modules/logger');
const { createWindow, loadAppUrl, openDevTools, getMainWindow } = require('./modules/window-manager');
const { createMenu } = require('./modules/menu');
const { startNextServer } = require('./modules/server');
const { setupAutoUpdater } = require('./modules/updater');
const { initializeDatabase } = require('./modules/database');
const { clearCache } = require('./modules/cache');
const { setupIpcHandlers } = require('./modules/ipc-handlers');
// 是否是开发环境
const isDev = process.env.NODE_ENV === 'development';
const port = 1717;
let mainWindow;
// 当 Electron 完成初始化时创建窗口
app.whenReady().then(async () => {
try {
// 设置日志系统
setupLogging(app);
// 设置 IPC 处理程序
setupIpcHandlers(app, isDev);
setupIpcLogging(ipcMain, app, isDev);
// 初始化数据库
await initializeDatabase(app);
// 创建主窗口
mainWindow = createWindow(isDev, port);
// 创建菜单
createMenu(mainWindow, () => clearCache(app));
// 在开发环境中加载 localhost URL
if (isDev) {
loadAppUrl(`http://localhost:${port}`);
openDevTools();
} else {
// 在生产环境中启动 Next.js 服务
const appUrl = await startNextServer(port, app);
loadAppUrl(appUrl);
}
// 设置自动更新
setupAutoUpdater(mainWindow);
// 应用启动完成后的一段时间后自动检查更新
setTimeout(() => {
if (!isDev) {
const { autoUpdater } = require('electron-updater');
autoUpdater.checkForUpdates().catch(err => {
console.error('Automatic update check failed:', err);
});
}
}, 10000); // Check for updates after 10 seconds
} catch (error) {
console.error('An error occurred during application initialization:', error);
dialog.showErrorBox(
'Application Initialization Error',
`An error occurred during startup, which may affect application functionality.
Error details: ${error.message}`
);
}
});
// 当所有窗口关闭时退出应用
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
mainWindow = createWindow(isDev, port);
}
});
// 应用退出前清理
app.on('before-quit', () => {
console.log('应用正在退出...');
});