You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
983 B
JavaScript
28 lines
983 B
JavaScript
import {getMxcFromUserId, getPreviewUrl} from '@/lib/getMxc';
|
|
import {calcUserName} from '@/lib/matrixUtils';
|
|
import {getRoom} from '@/lib/matrixUtils';
|
|
import {router} from '@/router';
|
|
|
|
export class NotificationHandler{
|
|
constructor() {
|
|
this.activateNotification();
|
|
}
|
|
async activateNotification(){
|
|
if (!window.Notification){
|
|
console.log('notifications are unsupported')
|
|
return false;
|
|
}
|
|
if (Notification.permission === 'granted') return true;
|
|
return await Notification.requestPermission()
|
|
.then(permission => {return permission === 'granted'});
|
|
}
|
|
showNotification(event){
|
|
if (Notification.permission !== 'granted') return false;
|
|
console.log(event);
|
|
let mxc = getMxcFromUserId(event.sender);
|
|
new Notification(`${calcUserName(event.sender)} in ${getRoom(event.room_id).name}`, {
|
|
body: event.content.body,
|
|
icon: mxc?getPreviewUrl(mxc):undefined
|
|
}).onclick = ()=>router.push(`/rooms/${event.room_id}`);
|
|
}
|
|
} |