Files
gdt-tool/src/main/index.ts
T
2025-11-05 14:46:49 +08:00

93 lines
2.4 KiB
TypeScript

import type { RenderProcessGoneDetails, WebContents } from 'electron';
import { join } from 'node:path';
import { app } from 'electron';
import log from 'electron-log/main';
import { AutoUpdater } from './AutoUpdater';
import { createErrorWindow, createMainWindow } from './MainRunner';
import Constants from './utils/Constants';
let mainWindow;
let errorWindow;
const initializeMainLogger = () => {
log.initialize({
includeFutureSessions: false,
preload: true,
});
const appLogFilePath = join(app.getPath('userData'), 'logs', 'applog.log');
log.transports.file.resolvePathFn = () =>
join(app.getPath('userData'), 'logs', 'applog.log');
log.transports.file.level = 'silly';
log.transports.file.format = '[{y}{m}{d} {h}:{i}:{s}.{ms}|{level}]{text}';
log.transports.console.format = '{h}:{i}:{s}.{ms} {text}';
log.transports.console.level = 'silly';
log.silly(`Start logging... (Path: ${appLogFilePath}) App is ready.`);
};
app.on('ready', async () => {
if (Constants.IS_DEV_ENV) {
import('./index.dev');
// Install Vue DevTools
try {
const { default: installExtension, VUEJS_DEVTOOLS } = await import('electron-devtools-installer');
await installExtension(VUEJS_DEVTOOLS, {
loadExtensionOptions: {
allowFileAccess: true,
},
});
} catch (err) {
console.log('Failed to install Vue DevTools: ', err);
}
}
// Disable special menus on macOS by uncommenting the following, if necessary
/*
if (Constants.IS_MAC) {
systemPreferences.setUserDefault('NSDisabledDictationMenuItem', 'boolean', true)
systemPreferences.setUserDefault('NSDisabledCharacterPaletteMenuItem', 'boolean', true)
}
*/
initializeMainLogger();
mainWindow = await createMainWindow();
// Initialize auto updater after main window is created
if (!Constants.IS_DEV_ENV) {
autoUpdater = new AutoUpdater(mainWindow);
}
});
app.on('activate', async () => {
if (!mainWindow) {
mainWindow = await createMainWindow();
}
});
app.on('window-all-closed', () => {
mainWindow = null;
errorWindow = null;
if (!Constants.IS_MAC) {
app.quit();
}
});
app.on(
'render-process-gone',
(
event: Event,
webContents: WebContents,
details: RenderProcessGoneDetails,
) => {
errorWindow = createErrorWindow(errorWindow, mainWindow, details);
},
);
process.on('uncaughtException', () => {
errorWindow = createErrorWindow(errorWindow, mainWindow);
});