2017-05-03 17:48:23 +00:00
|
|
|
import needsRestart from 'electron-squirrel-startup';
|
2016-12-01 18:48:49 +00:00
|
|
|
import electron from 'electron';
|
2017-05-03 17:48:23 +00:00
|
|
|
import {isDevelopment, isMac} from './common/constants';
|
|
|
|
import * as errorHandling from './main/error-handling';
|
|
|
|
import * as updates from './main/updates';
|
2017-05-24 16:25:22 +00:00
|
|
|
import * as windowUtils from './main/window-utils';
|
2017-11-17 12:10:37 +00:00
|
|
|
import * as models from './models/index';
|
|
|
|
import * as database from './common/database';
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Handle potential auto-update
|
|
|
|
if (needsRestart) {
|
|
|
|
process.exit(0);
|
|
|
|
}
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-11-18 22:47:54 +00:00
|
|
|
// Fall back so client-side code works
|
|
|
|
console.debug = console.debug || console.log;
|
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Initialize some things
|
|
|
|
errorHandling.init();
|
|
|
|
updates.init();
|
2017-05-24 16:25:22 +00:00
|
|
|
windowUtils.init();
|
2017-11-17 12:10:37 +00:00
|
|
|
database.init(models.types());
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
function addUrlToOpen (e, url) {
|
|
|
|
e.preventDefault();
|
|
|
|
args.push(url);
|
2016-12-01 18:48:49 +00:00
|
|
|
}
|
|
|
|
|
2017-08-01 22:03:12 +00:00
|
|
|
const {app, ipcMain, session} = electron;
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
const args = process.argv.slice(1);
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Set as default protocol
|
|
|
|
app.setAsDefaultProtocolClient(`insomnia${isDevelopment() ? 'dev' : ''}`);
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
app.on('open-url', addUrlToOpen);
|
2016-12-01 18:48:49 +00:00
|
|
|
|
|
|
|
// Enable this for CSS grid layout :)
|
|
|
|
app.commandLine.appendSwitch('enable-experimental-web-platform-features');
|
|
|
|
|
|
|
|
// Quit when all windows are closed (except on Mac).
|
|
|
|
app.on('window-all-closed', () => {
|
2017-05-03 17:48:23 +00:00
|
|
|
if (!isMac()) {
|
2016-12-01 18:48:49 +00:00
|
|
|
app.quit();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Mac-only, when the user clicks the doc icon
|
|
|
|
app.on('activate', (e, hasVisibleWindows) => {
|
|
|
|
// Create a new window when clicking the doc icon if there isn't one open
|
|
|
|
if (!hasVisibleWindows) {
|
|
|
|
try {
|
2017-05-24 16:25:22 +00:00
|
|
|
windowUtils.createWindow();
|
2016-12-01 18:48:49 +00:00
|
|
|
} catch (e) {
|
|
|
|
// This might happen if 'ready' hasn't fired yet. So we're just going
|
|
|
|
// to silence these errors.
|
2017-11-18 22:47:54 +00:00
|
|
|
console.log('[main] App not ready to "activate" yet');
|
2016-12-01 18:48:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// When the app is first launched
|
2017-07-20 19:29:16 +00:00
|
|
|
app.on('ready', async () => {
|
2017-11-18 22:47:54 +00:00
|
|
|
// TODO: Fix these. They stopped working
|
2017-07-20 19:29:16 +00:00
|
|
|
// Install developer extensions if we're in dev mode
|
2017-11-18 22:47:54 +00:00
|
|
|
// if (isDevelopment() || process.env.INSOMNIA_FORCE_DEBUG) {
|
|
|
|
// try {
|
|
|
|
// console.debug('[main] Installed Extension: ' + await installExtension(REACT_DEVELOPER_TOOLS));
|
|
|
|
// console.debug('[main] Installed Extension: ' + await installExtension(REDUX_DEVTOOLS));
|
|
|
|
// } catch (err) {
|
|
|
|
// console.warn('Failed to install devtools extension', err);
|
|
|
|
// }
|
|
|
|
// }
|
2017-07-20 19:09:07 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
app.removeListener('open-url', addUrlToOpen);
|
2017-05-24 16:25:22 +00:00
|
|
|
const window = windowUtils.createWindow();
|
2016-12-01 18:48:49 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Handle URLs sent via command line args
|
|
|
|
ipcMain.once('app-ready', () => {
|
|
|
|
args.length && window.send('run-command', args[0]);
|
2016-12-01 18:48:49 +00:00
|
|
|
});
|
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Called when second instance launched with args (Windows)
|
|
|
|
app.makeSingleInstance(args => {
|
|
|
|
args.length && window.send('run-command', args[0]);
|
2016-12-01 18:48:49 +00:00
|
|
|
});
|
2016-12-01 20:22:43 +00:00
|
|
|
|
2017-05-03 17:48:23 +00:00
|
|
|
// Handle URLs when app already open
|
|
|
|
app.addListener('open-url', (e, url) => {
|
|
|
|
window.send('run-command', url);
|
|
|
|
// Apparently a timeout is needed because Chrome steals back focus immediately
|
|
|
|
// after opening the URL.
|
|
|
|
setTimeout(() => {
|
|
|
|
window.focus();
|
|
|
|
}, 100);
|
2016-12-01 18:48:49 +00:00
|
|
|
});
|
2017-08-01 22:03:12 +00:00
|
|
|
|
|
|
|
// Don't send origin header from Insomnia app because we're not technically using CORS
|
|
|
|
session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
|
|
|
|
delete details.requestHeaders['Origin'];
|
|
|
|
callback({ cancel: false, requestHeaders: details.requestHeaders });
|
|
|
|
});
|
2017-05-03 17:48:23 +00:00
|
|
|
});
|