Open thread on native notification click (#20176)

pull/20214/head
Germain 2021-12-15 08:34:54 +00:00 committed by GitHub
parent 705366ab8c
commit 23b21c940c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 35 deletions

View File

@ -368,7 +368,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
return true; return true;
} }
displayNotification(title: string, msg: string, avatarUrl: string, room: Room): Notification { displayNotification(title: string, msg: string, avatarUrl: string, room: Room, ev?: MatrixEvent): Notification {
// GNOME notification spec parses HTML tags for styling... // GNOME notification spec parses HTML tags for styling...
// Electron Docs state all supported linux notification systems follow this markup spec // Electron Docs state all supported linux notification systems follow this markup spec
// https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux // https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux
@ -379,20 +379,17 @@ export default class ElectronPlatform extends VectorBasePlatform {
msg = msg.replace(/</g, '&lt;').replace(/>/g, '&gt;'); msg = msg.replace(/</g, '&lt;').replace(/>/g, '&gt;');
} }
// Notifications in Electron use the HTML5 notification API const notification = super.displayNotification(
const notifBody = { title,
body: msg, msg,
silent: true, // we play our own sounds avatarUrl,
}; room,
if (avatarUrl) notifBody['icon'] = avatarUrl; ev,
const notification = new window.Notification(title, notifBody); );
const handler = notification.onclick as Function;
notification.onclick = () => { notification.onclick = () => {
dis.dispatch({ handler?.();
action: 'view_room',
room_id: room.roomId,
});
window.focus();
this.ipcCall('focusWindow'); this.ipcCall('focusWindow');
}; };

View File

@ -20,7 +20,6 @@ import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform";
import request from 'browser-request'; import request from 'browser-request';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import { _t } from 'matrix-react-sdk/src/languageHandler'; import { _t } from 'matrix-react-sdk/src/languageHandler';
import { Room } from "matrix-js-sdk/src/models/room";
import { hideToast as hideUpdateToast, showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast"; import { hideToast as hideUpdateToast, showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast";
import { Action } from "matrix-react-sdk/src/dispatcher/actions"; import { Action } from "matrix-react-sdk/src/dispatcher/actions";
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload'; import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
@ -78,27 +77,6 @@ export default class WebPlatform extends VectorBasePlatform {
}); });
} }
displayNotification(title: string, msg: string, avatarUrl: string, room: Room) {
const notifBody = {
body: msg,
tag: "vector",
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
notification.onclick = function() {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
window.focus();
notification.close();
};
return notification;
}
private getMostRecentVersion(): Promise<string> { private getMostRecentVersion(): Promise<string> {
// We add a cachebuster to the request to make sure that we know about // We add a cachebuster to the request to make sure that we know about
// the most recent version on the origin server. That might not // the most recent version on the origin server. That might not