Pass MatrixEvent to displayNotification method (#7355)

pull/21833/head
Germain 2021-12-15 08:34:52 +00:00 committed by GitHub
parent 42b14bfcd7
commit 53081f52fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 3 deletions

View File

@ -170,7 +170,36 @@ export default abstract class BasePlatform {
*/ */
abstract requestNotificationPermission(): Promise<string>; abstract requestNotificationPermission(): Promise<string>;
abstract displayNotification(title: string, msg: string, avatarUrl: string, room: Room); public displayNotification(
title: string,
msg: string,
avatarUrl: string,
room: Room,
ev?: MatrixEvent,
): Notification {
const notifBody = {
body: msg,
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
notification.onclick = () => {
const payload: ActionPayload = {
action: Action.ViewRoom,
room_id: room.roomId,
};
if (ev.getThread()) {
payload.event_id = ev.getId();
}
dis.dispatch(payload);
window.focus();
};
return notification;
}
loudNotification(ev: MatrixEvent, room: Room) { loudNotification(ev: MatrixEvent, room: Room) {
} }

View File

@ -122,7 +122,7 @@ export const Notifier = {
avatarUrl = Avatar.avatarUrlForMember(ev.sender, 40, 40, 'crop'); avatarUrl = Avatar.avatarUrlForMember(ev.sender, 40, 40, 'crop');
} }
const notif = plaf.displayNotification(title, msg, avatarUrl, room); const notif = plaf.displayNotification(title, msg, avatarUrl, room, ev);
// if displayNotification returns non-null, the platform supports // if displayNotification returns non-null, the platform supports
// clearing notifications later, so keep track of this. // clearing notifications later, so keep track of this.
@ -381,7 +381,7 @@ export const Notifier = {
_evaluateEvent: function(ev: MatrixEvent) { _evaluateEvent: function(ev: MatrixEvent) {
const room = MatrixClientPeg.get().getRoom(ev.getRoomId()); const room = MatrixClientPeg.get().getRoom(ev.getRoomId());
const actions = MatrixClientPeg.get().getPushActionsForEvent(ev); const actions = MatrixClientPeg.get().getPushActionsForEvent(ev);
if (actions && actions.notify) { if (actions?.notify) {
if (RoomViewStore.getRoomId() === room.roomId && if (RoomViewStore.getRoomId() === room.roomId &&
UserActivity.sharedInstance().userActiveRecently() && UserActivity.sharedInstance().userActiveRecently() &&
!Modal.hasDialogs() !Modal.hasDialogs()