1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-15 09:04:04 +02:00
joplin/ElectronClient/app/ElectronAppWrapper.js
2017-11-30 18:29:10 +00:00

111 lines
2.4 KiB
JavaScript

const { _ } = require('lib/locale.js');
const { BrowserWindow } = require('electron');
const url = require('url')
const path = require('path')
const urlUtils = require('lib/urlUtils.js');
class ElectronAppWrapper {
constructor(electronApp, env) {
this.electronApp_ = electronApp;
this.env_ = env;
this.win_ = null;
this.willQuitApp_ = false;
}
electronApp() {
return this.electronApp_;
}
setLogger(v) {
this.logger_ = v;
}
logger() {
return this.logger_;
}
window() {
return this.win_;
}
createWindow() {
const windowStateKeeper = require('electron-window-state');
// Load the previous state with fallback to defaults
const windowState = windowStateKeeper({
defaultWidth: 800,
defaultHeight: 600,
});
this.win_ = new BrowserWindow({
'x': windowState.x,
'y': windowState.y,
'width': windowState.width,
'height': windowState.height
})
this.win_.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
// Uncomment this to view errors if the application does not start
if (this.env_ === 'dev') this.win_.webContents.openDevTools();
this.win_.on('close', (event) => {
if (this.willQuitApp_ || process.platform !== 'darwin') {
this.win_ = null;
} else {
event.preventDefault();
this.win_.hide();
}
})
// Let us register listeners on the window, so we can update the state
// automatically (the listeners will be removed when the window is closed)
// and restore the maximized or full screen state
windowState.manage(this.win_);
}
async waitForElectronAppReady() {
if (this.electronApp().isReady()) return Promise.resolve();
return new Promise((resolve, reject) => {
const iid = setInterval(() => {
if (this.electronApp().isReady()) {
clearInterval(iid);
resolve();
}
}, 10);
});
}
async exit() {
this.electronApp_.quit();
}
async start() {
// Since we are doing other async things before creating the window, we might miss
// the "ready" event. So we use the function below to make sure that the app is ready.
await this.waitForElectronAppReady();
this.createWindow();
this.electronApp_.on('before-quit', () => {
this.willQuitApp_ = true;
})
this.electronApp_.on('window-all-closed', () => {
this.electronApp_.quit();
})
this.electronApp_.on('activate', () => {
this.win_.show();
})
}
}
module.exports = { ElectronAppWrapper };