93 lines
2.4 KiB
TypeScript
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);
|
|
});
|