import { app, BrowserWindow, ipcMain } from "electron"; import fs from 'fs/promises' import { WORKING_DIR } from "../constants"; import path from "path"; import { Logger } from "../logger"; const logger = Logger('bootloader'); ipcMain.handleOnce('report-boot-process-failed', async () => { /** * Если процесс загрузки не завершился успешно, то preload показывает * экран ошибки, а нам нужно откатиться назад к загрузке dev.html * и удалить скомпилированные файлы, чтобы при следующем запуске * приложение попыталось загрузиться в режиме разработки. */ let filePath = path.join(WORKING_DIR, 'b'); await fs.rmdir(filePath, { recursive: true }); logger.log("Boot process failed, removed compiled files"); logger.log(`Removed compiled files at ${filePath}`); logger.log(`Restarting application in safe mode`); app.relaunch(); app.exit(0); }); /** * Boot функция, эта функция запускает приложение * @param window окно */ export async function boot(window : BrowserWindow) { if (!app.isPackaged && process.env['ELECTRON_RENDERER_URL']) { await bootDevelopment(window); // await bootProduction(window); window.webContents.openDevTools({ mode: 'detach' }); //console.info(window.webContents); return; } //window.webContents.openDevTools({ mode: 'detach' }); await bootProduction(window); } async function bootProduction(window : BrowserWindow) { logger.log("Booting in production mode"); let html = path.join(WORKING_DIR, 'b', 'j.html'); if(await existsFile(html)){ logger.log(`Loading compiled file`); window.loadFile(html); } else { logger.log(`Loading conatiner file`); window.loadFile(path.join(__dirname, '../renderer/dev.html')); } } async function bootDevelopment(window : BrowserWindow) { logger.log("Booting in development mode"); window.loadURL(process.env['ELECTRON_RENDERER_URL'] + "/dev.html"); window.webContents.openDevTools({ mode: 'detach' }); } async function existsFile(filePath: string): Promise { try { await fs.access(filePath); return true; } catch { return false; } }