mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-06 14:05:46 +01:00
generate notification path on demand
This commit is contained in:
@@ -66,26 +66,28 @@ define('notifications', ['sounds', 'translator', 'components'], function(sound,
|
||||
|
||||
socket.on('event:new_notification', function(notifData) {
|
||||
// If a path is defined, show notif data, otherwise show generic data
|
||||
var payload;
|
||||
if (notifData.path) {
|
||||
payload = {
|
||||
var payload = {
|
||||
alert_id: 'new_notif',
|
||||
title: '[[notifications:new_notification]]',
|
||||
message: notifData.bodyShort,
|
||||
type: 'info',
|
||||
timeout: 2000,
|
||||
clickfn: function() {
|
||||
ajaxify.go(notifData.path);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
payload = {
|
||||
alert_id: 'new_notif',
|
||||
title: '[[notifications:new_notification]]',
|
||||
message: '[[notifications:you_have_unread_notifications]]',
|
||||
type: 'warning',
|
||||
timeout: 2000
|
||||
};
|
||||
|
||||
if (notifData.path) {
|
||||
payload.message = notifData.bodyShort;
|
||||
payload.type = 'info';
|
||||
payload.clickfn = function() {
|
||||
socket.emit('notifications.generatePath', notifData.nid, function(err, path) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
}
|
||||
if (path) {
|
||||
ajaxify.go(path);
|
||||
}
|
||||
});
|
||||
};
|
||||
} else {
|
||||
payload.message: '[[notifications:you_have_unread_notifications]]';
|
||||
payload.type = 'warning';
|
||||
}
|
||||
|
||||
app.alert(payload);
|
||||
|
||||
@@ -195,11 +195,8 @@ var async = require('async'),
|
||||
|
||||
var websockets = require('./socket.io');
|
||||
if (websockets.server) {
|
||||
// Add notification paths to sent notification object as well
|
||||
async.eachLimit(uids, 50, function(uid, next) {
|
||||
User.notifications.generateNotificationPaths([notification], uid, function(err, notifications) {
|
||||
websockets.in('uid_' + uid).emit('event:new_notification', notifications[0]);
|
||||
});
|
||||
uids.forEach(function(uid) {
|
||||
websockets.in('uid_' + uid).emit('event:new_notification', notification);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -386,7 +383,7 @@ var async = require('async'),
|
||||
var usernames = set.map(function(notifObj) {
|
||||
return notifObj.user.username;
|
||||
}).filter(function(username, idx, array) {
|
||||
return array.indexOf(username) === idx
|
||||
return array.indexOf(username) === idx;
|
||||
});
|
||||
var numUsers = usernames.length;
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
var user = require('../user'),
|
||||
notifications = require('../notifications'),
|
||||
SocketNotifs = {};
|
||||
var async = require('async');
|
||||
var user = require('../user');
|
||||
var notifications = require('../notifications');
|
||||
|
||||
var SocketNotifs = {};
|
||||
|
||||
SocketNotifs.get = function(socket, data, callback) {
|
||||
if (data && Array.isArray(data.nids) && socket.uid) {
|
||||
@@ -53,4 +55,28 @@ SocketNotifs.markAllRead = function(socket, data, callback) {
|
||||
notifications.markAllRead(socket.uid, callback);
|
||||
};
|
||||
|
||||
SocketNotifs.generatePath = function(socket, nid, callback) {
|
||||
if (!socket.uid) {
|
||||
return;
|
||||
}
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
notifications.get(nid, next);
|
||||
},
|
||||
function (notification, next) {
|
||||
if (!notification) {
|
||||
return next(null, '');
|
||||
}
|
||||
user.notifications.generateNotificationPaths([notification], socket.uid, next);
|
||||
},
|
||||
function (notificationsData, next) {
|
||||
if (notificationsData && notificationsData.length) {
|
||||
next(null, notificationsData[0].path);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
|
||||
module.exports = SocketNotifs;
|
||||
|
||||
Reference in New Issue
Block a user