summaryrefslogtreecommitdiffstats
path: root/server/notifications/notifications.js
blob: 3f103339fcdebaf4a23fba52225c67ec74dffe68 (plain)
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
// 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];
  },

  getUsers: watchers => {
    const users = [];
    watchers.forEach(userId => {
      const user = Users.findOne(userId);
      if (user) users.push(user);
    });
    return users;
  },

  notify: (user, title, description, params) => {
    for (const k in notifyServices) {
      const notifyImpl = notifyServices[k];
      if (notifyImpl && typeof notifyImpl === 'function')
        notifyImpl(user, title, description, params);
    }
  },
};