1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
import { AbstractPlugin } from '../plugin/AbstractPlugin';
import PluginAPI from '../plugin/PluginAPI';
import Translation from '../util/Translation';
import Notification from '../Notification';
import { Presence } from '../connection/AbstractConnection';
import { SOUNDS } from '../CONST';
import { IContact } from '@src/Contact.interface';
import { IMessage } from '@src/Message.interface';
const MIN_VERSION = '4.0.0';
const MAX_VERSION = '99.0.0';
export default class NotificationPlugin extends AbstractPlugin {
public static getId(): string {
return 'notification';
}
public static getName(): string {
return 'Desktop Notification';
}
public static getDescription(): string {
return Translation.t('setting-notification-enable');
}
constructor(pluginAPI: PluginAPI) {
super(MIN_VERSION, MAX_VERSION, pluginAPI);
pluginAPI.addAfterReceiveMessageProcessor(this.afterReceiveMessageProcessor, 90);
pluginAPI.addAfterReceiveGroupMessageProcessor(this.afterReceiveMessageProcessor, 90);
pluginAPI.registerPresenceHook(this.onPresence);
}
private afterReceiveMessageProcessor = (
contact: IContact,
message: IMessage,
stanza: Element
): Promise<[IContact, IMessage, Element]> => {
if ((message.getPlaintextMessage() || message.getAttachment()) && message.isIncoming()) {
Notification.notify({
title: Translation.t('New_message_from', {
name: contact.getName(),
}),
message: message.getPlaintextMessage(),
soundFile: SOUNDS.MSG,
source: contact,
});
}
return Promise.resolve([contact, message, stanza]);
};
private onPresence = (contact: IContact, newPresence, oldPresence) => {
if (oldPresence !== Presence.offline || newPresence === Presence.offline) {
return;
}
let now = new Date();
let created = this.pluginAPI.getConnectionCreationDate() || now;
if (!created || now.valueOf() - created.valueOf() < 2 * 60 * 1000) {
return;
}
Notification.notify({
title: contact.getName(),
message: Translation.t('has_come_online'),
source: contact,
});
};
}
|