bruno/packages/bruno-electron/src/index.js

85 lines
2.6 KiB
JavaScript
Raw Normal View History

const path = require('path');
const isDev = require('electron-is-dev');
const { format } = require('url');
const { BrowserWindow, app, Menu } = require('electron');
const { setContentSecurityPolicy } = require('electron-util');
const menuTemplate = require('./app/menu-template');
const LastOpenedCollections = require('./store/last-opened-collections');
const registerNetworkIpc = require('./ipc/network');
2023-01-22 14:05:57 +01:00
const registerCollectionsIpc = require('./ipc/collection');
const registerPreferencesIpc = require('./ipc/preferences');
const Watcher = require('./app/watcher');
2023-10-07 14:27:24 +02:00
const { loadWindowState, saveWindowState } = require('./utils/window');
const lastOpenedCollections = new LastOpenedCollections();
const contentSecurityPolicy = [
isDev ? "default-src 'self' 'unsafe-inline' 'unsafe-eval'" : "default-src 'self'",
"connect-src 'self' https://api.github.com/repos/usebruno/bruno",
"font-src 'self' https://fonts.gstatic.com",
"form-action 'none'",
"img-src 'self' blob: data:",
"style-src 'self' https://fonts.googleapis.com"
];
setContentSecurityPolicy(contentSecurityPolicy.join(';'));
const menu = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menu);
let mainWindow;
let watcher;
// Prepare the renderer once the app is ready
app.on('ready', async () => {
2023-10-07 14:27:24 +02:00
const { x, y, width, height } = loadWindowState();
mainWindow = new BrowserWindow({
2023-10-07 14:27:24 +02:00
x,
y,
width,
height,
minWidth: 1000,
minHeight: 640,
webPreferences: {
nodeIntegration: true,
contextIsolation: true,
preload: path.join(__dirname, 'preload.js'),
webviewTag: true
2023-10-05 16:53:33 +02:00
},
2023-10-05 16:59:50 +02:00
title: 'Bruno',
2023-10-06 23:56:12 +02:00
icon: path.join(__dirname, 'about/256x256.png')
// we will bring this back
// see https://github.com/usebruno/bruno/issues/440
// autoHideMenuBar: true
});
const url = isDev
? 'http://localhost:3000'
: format({
2022-10-17 17:34:05 +02:00
pathname: path.join(__dirname, '../web/index.html'),
protocol: 'file:',
slashes: true
});
mainWindow.loadURL(url);
watcher = new Watcher();
2023-10-07 14:27:24 +02:00
mainWindow.on('resize', () => saveWindowState(mainWindow));
mainWindow.on('move', () => saveWindowState(mainWindow));
mainWindow.webContents.on('new-window', function (e, url) {
e.preventDefault();
require('electron').shell.openExternal(url);
});
// register all ipc handlers
registerNetworkIpc(mainWindow);
2023-01-22 14:05:57 +01:00
registerCollectionsIpc(mainWindow, watcher, lastOpenedCollections);
registerPreferencesIpc(mainWindow, watcher, lastOpenedCollections);
});
// Quit the app once all windows are closed
app.on('window-all-closed', app.quit);