gui/modules/desktop/electron/electron.ts

115 lines
2.5 KiB
TypeScript

import windowStateManager from 'electron-window-state';
import { app, BrowserWindow, ipcMain } from 'electron';
import contextMenu from 'electron-context-menu';
import serve from 'electron-serve';
import path from 'path';
import fs from 'fs';
import { getInstalledPackages } from './libs/teaDir';
try {
//@ts-ignore only used in dev should not be packaged inprod
/* eslint-disable */
const er = require('electron-reloader');
er(module);
} catch (e) {
console.error(e);
}
const serveURL = serve({ directory: '.' });
const port = process.env.PORT || 3000;
const dev = !app.isPackaged;
let mainWindow: BrowserWindow | null;
function createWindow() {
const windowState = windowStateManager({
defaultWidth: 800,
defaultHeight: 600
});
const mainWindow = new BrowserWindow({
backgroundColor: 'whitesmoke',
autoHideMenuBar: true,
trafficLightPosition: {
x: 17,
y: 32
},
minHeight: 450,
minWidth: 500,
webPreferences: {
// enableRemoteModule: true,
contextIsolation: false,
nodeIntegration: true,
spellcheck: false,
webSecurity: false,
devTools: dev
// preload: path.join(app.getAppPath(), 'preload.cjs')
},
x: windowState.x,
y: windowState.y,
width: windowState.width,
height: windowState.height
});
windowState.manage(mainWindow);
mainWindow.once('ready-to-show', () => {
mainWindow.show();
mainWindow.focus();
});
mainWindow.on('close', () => {
windowState.saveState(mainWindow);
});
return mainWindow;
}
contextMenu({
showLookUpSelection: false,
showSearchWithGoogle: false,
showCopyImage: false,
prepend: (defaultActions, params, browserWindow) => [
{
label: 'Make App 💻'
}
]
});
function loadVite(port) {
mainWindow?.loadURL(`http://localhost:${port}`).catch((e) => {
console.log('Error loading URL, retrying', e);
setTimeout(() => {
loadVite(port);
}, 200);
});
}
function createMainWindow() {
mainWindow = createWindow();
mainWindow.once('close', () => {
mainWindow = null;
});
if (dev) loadVite(port);
else serveURL(mainWindow);
}
app.once('ready', createMainWindow);
app.on('activate', () => {
if (!mainWindow) {
createMainWindow();
}
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});
ipcMain.on('to-main', (event, count) => {
return mainWindow?.webContents.send('from-main', `next count is ${count + 1}`);
});
ipcMain.handle('get-installed-packages', async () => {
console.log('get installed pkgs: ipc');
const pkgs = await getInstalledPackages();
return pkgs;
});