use electron notification api

This commit is contained in:
Labhansh Agrawal 2020-03-04 17:01:19 +05:30 committed by Benjamin Staneck
parent a6ba442c1d
commit a81ba84f1e
2 changed files with 4 additions and 43 deletions

View file

@ -1,5 +0,0 @@
<script>
require('electron').ipcRenderer.on('notification', (ev, { title, body }) => {
new Notification(title, { body });
});
</script>

View file

@ -1,44 +1,10 @@
import {resolve} from 'path';
import {app, BrowserWindow} from 'electron';
import isDev from 'electron-is-dev';
import {Notification} from 'electron';
import {icon} from './config/paths';
let win: BrowserWindow;
// the hack of all hacks
// electron doesn't have a built in notification thing,
// so we launch a window on which we can use the
// HTML5 `Notification` API :'(
let buffer: string[][] = [];
function notify(title: string, body = '', details: any = {}) {
export default function notify(title: string, body = '', details: any = {}) {
console.log(`[Notification] ${title}: ${body}`);
if (details.error) {
console.error(details.error);
}
if (win) {
win.webContents.send('notification', {title, body});
} else {
buffer.push([title, body]);
}
new Notification({title, body, ...(process.platform === 'linux' && {icon})}).show();
}
app.on('ready', () => {
const win_ = new BrowserWindow({
show: false,
webPreferences: {
nodeIntegration: true
}
});
const url = `file://${resolve(isDev ? __dirname : app.getAppPath(), 'notify.html')}`;
win_.loadURL(url);
win_.webContents.on('dom-ready', () => {
win = win_;
buffer.forEach(([title, body]) => {
notify(title, body);
});
buffer = [];
});
});
export default notify;