68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
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<boolean> {
|
||
try {
|
||
await fs.access(filePath);
|
||
return true;
|
||
} catch {
|
||
return false;
|
||
}
|
||
}
|