Pass MatrixEvent to displayNotification method (#7355)
This commit is contained in:
parent
42b14bfcd7
commit
53081f52fb
2 changed files with 32 additions and 3 deletions
|
@ -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) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue