const electron = require('electron');
const { app, Menu, Tray, shell} = require('electron')
const ipc = electron.ipcMain;
let tray;
let mainWindow;
const iconFile = `${__dirname}/images/256x256.png`;
const title = 'P3X OneNote';
const BrowserWindow = electron.BrowserWindow;
const configstore = require('configstore');
const pkg = require('../../package.json');
const conf = new configstore(pkg.name);
const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
setVisible(true);
mainWindow.webContents.reload();
})
if (isSecondInstance) {
app.quit()
}
const action = {
restart: () => {
mainWindow.webContents.send('action', {
action: 'restart'
})
},
home: () => {
mainWindow.show();
mainWindow.webContents.send('action', {
action: 'home'
})
},
corporate: () => {
mainWindow.show();
mainWindow.webContents.send('action', {
action: 'corporate'
})
},
toggleVisible: () => {
if (mainWindow === undefined) {
return;
}
setVisible(!mainWindow.isVisible());
},
quit: function () {
app.isQuiting = true;
app.quit();
},
github: () => {
shell.openExternal('https://github.com/patrikx3/onenote')
},
patrik: () => {
shell.openExternal('https://patrikx3.com')
},
p3x: () => {
shell.openExternal('https://github.com/patrikx3')
},
corifeus: () => {
shell.openExternal('https://corifeus.com')
},
npm: () => {
shell.openExternal('https://www.npmjs.com/~patrikx3')
},
download: () => {
shell.openExternal('https://github.com/patrikx3/onenote/releases')
},
}
const menus = {
default: () => {
let visible = false;
if (mainWindow !== undefined) {
visible = mainWindow.isVisible() ? true : false;
}
return [
{
label: 'Personal home',
click: action.home
},
{
label: 'Corporate home',
click: action.corporate
},
{
label: 'First sign off, then click this menu option to clear the cache',
click: action.restart
},
{
label: visible ? 'Hide' : 'Show',
click: action.toggleVisible
},
{
label: 'Download',
click: action.download
},
{
label: 'Quit',
click: action.quit
}
]
}
}
function createMenu() {
const template = [
{
label: title,
submenu: menus.default(),
},
{
label: 'Edit',
submenu: [
{role: 'undo'},
{role: 'redo'},
{type: 'separator'},
{role: 'cut'},
{role: 'copy'},
{role: 'paste'},
{role: 'pasteandmatchstyle'},
{role: 'delete'},
{role: 'selectall'}
]
},
{
label: 'View',
submenu: [
{role: 'reload'},
{role: 'forcereload'},
{role: 'toggledevtools'},
{type: 'separator'},
{role: 'resetzoom'},
{role: 'zoomin'},
{role: 'zoomout'},
{type: 'separator'},
{role: 'togglefullscreen'}
]
},
{
role: 'help',
submenu: [
{
label: 'Download',
click: action.download
},
{
label: 'GitHub',
click: action.github
},
{
label: 'Patrik Laszlo',
click: action.patrik
},
{
label: 'P3X',
click: action.p3x
},
{
label: 'Corifeus',
click: action.corifeus
},
{
label: 'Npm',
click: action.npm
},
]
}
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
function createTray() {
if (tray === undefined) {
tray = new Tray(iconFile)
tray.setToolTip(title)
tray.on('click', action.toggleVisible)
}
const contextMenu = Menu.buildFromTemplate(menus.default())
tray.setContextMenu(contextMenu)
}
function setVisible(visible = true) {
if (visible === null) {
visible = true;
}
if (mainWindow !== undefined) {
if (visible) {
mainWindow.show();
} else {
mainWindow.hide();
}
}
conf.set('visible', visible);
createMenu();
createTray()
}
function createWindow() {
mainWindow = new BrowserWindow({
icon: iconFile,
toolbar: false,
title: title,
});
setVisible(conf.get('visible'));
mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.on('minimize', function (event) {
event.preventDefault()
setVisible(false);
});
mainWindow.on('close', function (event) {
if (!app.isQuiting) {
event.preventDefault()
setVisible(false);
}
return false;
});
const windowBounds = conf.get('windowBounds');
if (windowBounds !== null && windowBounds !== undefined) {
mainWindow.setBounds(windowBounds);
}
}
ipc.on('did-finish-load', function () {
const hostData = conf.get('toHost');
// console.log('Loading data', hostData);
if (hostData !== undefined && hostData !== null) {
mainWindow.webContents.send('onload-user', hostData);
}
});
ipc.on('save', function (event, data) {
// console.log('Save', data)
conf.set('toHost', data);
conf.set('windowBounds', mainWindow.getBounds());
})
app.on('ready', createWindow);
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', function () {
if (mainWindow === null) {
createWindow();
}
});