Signal-Desktop/app/WindowsNotifications.ts

50 lines
1.3 KiB
TypeScript

// Copyright 2017 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { ipcMain as ipc } from 'electron';
import type { IpcMainInvokeEvent } from 'electron';
import {
Notifier,
sendDummyKeystroke,
} from '@indutny/simple-windows-notifications';
import * as log from '../ts/logging/log';
import { AUMID } from './startup_config';
import type { WindowsNotificationData } from '../ts/services/notifications';
import { renderWindowsToast } from './renderWindowsToast';
export { sendDummyKeystroke };
const notifier = new Notifier(AUMID);
const NOTIFICATION_ID = {
group: 'group',
tag: 'tag',
};
ipc.handle(
'windows-notifications:show',
(_event: IpcMainInvokeEvent, data: WindowsNotificationData) => {
try {
// First, clear all previous notifications - we want just one notification at a time
notifier.remove(NOTIFICATION_ID);
notifier.show(renderWindowsToast(data), NOTIFICATION_ID);
} catch (error) {
log.error(
`Windows Notifications: Failed to show notification: ${error.stack}`
);
}
}
);
ipc.handle('windows-notifications:clear-all', () => {
try {
notifier.remove(NOTIFICATION_ID);
} catch (error) {
log.error(
`Windows Notifications: Failed to clear notifications: ${error.stack}`
);
}
});