mirror of
https://github.com/YunoHost-Apps/keeweb_ynh.git
synced 2024-09-03 19:26:33 +02:00
167 lines
5.3 KiB
JavaScript
167 lines
5.3 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
/* jshint node:true */
|
||
|
/* jshint browser:false */
|
||
|
|
||
|
var app = require('app'),
|
||
|
path = require('path'),
|
||
|
BrowserWindow = require('browser-window'),
|
||
|
Menu = require('menu'),
|
||
|
Tray = require('tray');
|
||
|
|
||
|
var mainWindow = null,
|
||
|
appIcon = null,
|
||
|
openFile = process.argv.filter(function(arg) { return /\.kdbx$/i.test(arg); })[0],
|
||
|
ready = false,
|
||
|
restartPending = false,
|
||
|
htmlPath = path.join(__dirname, 'index.html');
|
||
|
|
||
|
process.argv.forEach(function(arg) {
|
||
|
if (arg.lastIndexOf('--htmlpath=', 0) === 0) {
|
||
|
htmlPath = path.resolve(arg.replace('--htmlpath=', ''), 'index.html');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
app.on('window-all-closed', function() {
|
||
|
if (restartPending) {
|
||
|
// unbind all handlers, load new app.js module and pass control to it
|
||
|
app.removeAllListeners('window-all-closed');
|
||
|
app.removeAllListeners('ready');
|
||
|
app.removeAllListeners('open-file');
|
||
|
app.removeAllListeners('activate');
|
||
|
var userDataAppFile = path.join(app.getPath('userData'), 'app.js');
|
||
|
delete require.cache[require.resolve('./app.js')];
|
||
|
require(userDataAppFile);
|
||
|
app.emit('ready');
|
||
|
} else {
|
||
|
if (process.platform !== 'darwin') {
|
||
|
app.quit();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
app.on('ready', function() {
|
||
|
createMainWindow();
|
||
|
});
|
||
|
app.on('open-file', function(e, path) {
|
||
|
e.preventDefault();
|
||
|
openFile = path;
|
||
|
notifyOpenFile();
|
||
|
});
|
||
|
app.on('activate', function() {
|
||
|
if (process.platform === 'darwin') {
|
||
|
if (!mainWindow) {
|
||
|
createMainWindow();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
app.restartApp = function() {
|
||
|
restartPending = true;
|
||
|
mainWindow.close();
|
||
|
setTimeout(function() { restartPending = false; }, 1000);
|
||
|
};
|
||
|
app.openWindow = function(opts) {
|
||
|
return new BrowserWindow(opts);
|
||
|
};
|
||
|
app.minimizeApp = function() {
|
||
|
if (process.platform === 'win32') {
|
||
|
mainWindow.minimize();
|
||
|
mainWindow.setSkipTaskbar(true);
|
||
|
appIcon = new Tray(path.join(__dirname, 'icon.png'));
|
||
|
appIcon.on('click', restoreMainWindow);
|
||
|
var contextMenu = Menu.buildFromTemplate([
|
||
|
{ label: 'Open KeeWeb', click: restoreMainWindow },
|
||
|
{ label: 'Quit KeeWeb', click: closeMainWindow }
|
||
|
]);
|
||
|
appIcon.setContextMenu(contextMenu);
|
||
|
appIcon.setToolTip('KeeWeb');
|
||
|
}
|
||
|
};
|
||
|
app.getMainWindow = function() {
|
||
|
return mainWindow;
|
||
|
};
|
||
|
|
||
|
function createMainWindow() {
|
||
|
mainWindow = new BrowserWindow({
|
||
|
show: false,
|
||
|
width: 1000, height: 700, 'min-width': 600, 'min-height': 300,
|
||
|
icon: path.join(__dirname, 'icon.png')
|
||
|
});
|
||
|
setMenu();
|
||
|
mainWindow.loadURL('file://' + htmlPath);
|
||
|
mainWindow.webContents.on('dom-ready', function() {
|
||
|
setTimeout(function() {
|
||
|
mainWindow.show();
|
||
|
ready = true;
|
||
|
notifyOpenFile();
|
||
|
}, 50);
|
||
|
});
|
||
|
mainWindow.on('closed', function() {
|
||
|
mainWindow = null;
|
||
|
});
|
||
|
mainWindow.on('minimize', function() {
|
||
|
emitBackboneEvent('launcher-minimize');
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function restoreMainWindow() {
|
||
|
appIcon.destroy();
|
||
|
appIcon = null;
|
||
|
mainWindow.restore();
|
||
|
mainWindow.setSkipTaskbar(false);
|
||
|
}
|
||
|
|
||
|
function closeMainWindow() {
|
||
|
appIcon.destroy();
|
||
|
appIcon = null;
|
||
|
emitBackboneEvent('launcher-exit-request');
|
||
|
}
|
||
|
|
||
|
function emitBackboneEvent(e) {
|
||
|
mainWindow.webContents.executeJavaScript('Backbone.trigger("' + e + '");');
|
||
|
}
|
||
|
|
||
|
function setMenu() {
|
||
|
if (process.platform === 'darwin') {
|
||
|
var name = require('app').getName();
|
||
|
var template = [
|
||
|
{
|
||
|
label: name,
|
||
|
submenu: [
|
||
|
{ label: 'About ' + name, role: 'about' },
|
||
|
{ type: 'separator' },
|
||
|
{ label: 'Services', role: 'services', submenu: [] },
|
||
|
{ type: 'separator' },
|
||
|
{ label: 'Hide ' + name, accelerator: 'Command+H', role: 'hide' },
|
||
|
{ label: 'Hide Others', accelerator: 'Command+Shift+H', role: 'hideothers' },
|
||
|
{ label: 'Show All', role: 'unhide' },
|
||
|
{ type: 'separator' },
|
||
|
{ label: 'Quit', accelerator: 'Command+Q', click: function() { app.quit(); } }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
label: 'Edit',
|
||
|
submenu: [
|
||
|
{ label: 'Undo', accelerator: 'CmdOrCtrl+Z', role: 'undo' },
|
||
|
{ label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo' },
|
||
|
{ type: 'separator' },
|
||
|
{ label: 'Cut', accelerator: 'CmdOrCtrl+X', role: 'cut' },
|
||
|
{ label: 'Copy', accelerator: 'CmdOrCtrl+C', role: 'copy' },
|
||
|
{ label: 'Paste', accelerator: 'CmdOrCtrl+V', role: 'paste' },
|
||
|
{ label: 'Select All', accelerator: 'CmdOrCtrl+A', role: 'selectall' }
|
||
|
]
|
||
|
}
|
||
|
];
|
||
|
var menu = Menu.buildFromTemplate(template);
|
||
|
Menu.setApplicationMenu(menu);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function notifyOpenFile() {
|
||
|
if (ready && openFile && mainWindow) {
|
||
|
openFile = openFile.replace(/"/g, '\\"').replace(/\\/g, '\\\\');
|
||
|
mainWindow.webContents.executeJavaScript('if (window.launcherOpen) { window.launcherOpen("' + openFile + '"); } ' +
|
||
|
' else { window.launcherOpenedFile="' + openFile + '"; }');
|
||
|
openFile = null;
|
||
|
}
|
||
|
}
|