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
|
// a map of notification service, like email, web, IM, qq, etc.
// serviceName -> callback(user, title, description, params)
// expected arguments to callback:
// - user: Meteor user object
// - title: String, TAPi18n key
// - description, String, TAPi18n key
// - params: Object, values extracted from context, to used for above two TAPi18n keys
// see example call to Notifications.notify() in models/activities.js
const notifyServices = {};
Notifications = {
subscribe: (serviceName, callback) => {
notifyServices[serviceName] = callback;
},
unsubscribe: (serviceName) => {
if (typeof notifyServices[serviceName] === 'function')
delete notifyServices[serviceName];
},
// filter recipients according to user settings for notification
getUsers: (participants, watchers) => {
const userMap = {};
participants.forEach((userId) => {
if (userMap[userId]) return;
const user = Users.findOne(userId);
userMap[userId] = user;
});
watchers.forEach((userId) => {
if (userMap[userId]) return;
const user = Users.findOne(userId);
userMap[userId] = user;
});
return _.map(userMap, (v) => v);
},
notify: (user, title, description, params) => {
for(const k in notifyServices) {
const notifyImpl = notifyServices[k];
if (notifyImpl && typeof notifyImpl === 'function') notifyImpl(user, title, description, params);
}
},
};
|