v1.18.x
barisusakli 9 years ago
parent 18e68346e7
commit c266fe9983

@ -1,17 +1,17 @@
'use strict'; 'use strict';
var async = require('async'), var async = require('async');
winston = require('winston'), var winston = require('winston');
cron = require('cron').CronJob, var cron = require('cron').CronJob;
nconf = require('nconf'), var nconf = require('nconf');
S = require('string'), var S = require('string');
_ = require('underscore'), var _ = require('underscore');
db = require('./database'), var db = require('./database');
User = require('./user'), var User = require('./user');
groups = require('./groups'), var groups = require('./groups');
meta = require('./meta'), var meta = require('./meta');
plugins = require('./plugins'); var plugins = require('./plugins');
(function(Notifications) { (function(Notifications) {
@ -197,44 +197,46 @@ var async = require('async'),
}; };
function pushToUids(uids, notification, callback) { function pushToUids(uids, notification, callback) {
var oneWeekAgo = Date.now() - 604800000;
var unreadKeys = []; var unreadKeys = [];
var readKeys = []; var readKeys = [];
uids.forEach(function(uid) { async.waterfall([
unreadKeys.push('uid:' + uid + ':notifications:unread'); function (next) {
readKeys.push('uid:' + uid + ':notifications:read'); plugins.fireHook('filter:notification.push', {notification: notification, uids: uids}, next);
}); },
function (data, next) {
uids = data.uids;
notification = data.notification;
uids.forEach(function(uid) {
unreadKeys.push('uid:' + uid + ':notifications:unread');
readKeys.push('uid:' + uid + ':notifications:read');
});
var oneWeekAgo = Date.now() - 604800000;
async.series([
function(next) {
db.sortedSetsAdd(unreadKeys, notification.datetime, notification.nid, next); db.sortedSetsAdd(unreadKeys, notification.datetime, notification.nid, next);
}, },
function(next) { function (next) {
db.sortedSetsRemove(readKeys, notification.nid, next); db.sortedSetsRemove(readKeys, notification.nid, next);
}, },
function(next) { function (next) {
db.sortedSetsRemoveRangeByScore(unreadKeys, '-inf', oneWeekAgo, next); db.sortedSetsRemoveRangeByScore(unreadKeys, '-inf', oneWeekAgo, next);
}, },
function(next) { function (next) {
db.sortedSetsRemoveRangeByScore(readKeys, '-inf', oneWeekAgo, next); db.sortedSetsRemoveRangeByScore(readKeys, '-inf', oneWeekAgo, next);
} },
], function(err) { function (next) {
if (err) { var websockets = require('./socket.io');
return callback(err); if (websockets.server) {
} uids.forEach(function(uid) {
websockets.in('uid_' + uid).emit('event:new_notification', notification);
plugins.fireHook('action:notification.pushed', {notification: notification, uids: uids}); });
}
var websockets = require('./socket.io'); plugins.fireHook('action:notification.pushed', {notification: notification, uids: uids});
if (websockets.server) { next();
uids.forEach(function(uid) {
websockets.in('uid_' + uid).emit('event:new_notification', notification);
});
} }
], callback);
callback();
});
} }
Notifications.pushGroup = function(notification, groupName, callback) { Notifications.pushGroup = function(notification, groupName, callback) {

Loading…
Cancel
Save