diff --git a/src/messaging.js b/src/messaging.js index cd5d72e8ee..1a8dabb9b2 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -357,7 +357,7 @@ var async = require('async'), Messaging.canMessageRoom = function(uid, roomId, callback) { if (parseInt(meta.config.disableChat) === 1 || !uid) { - return callback(null, false, '[[error:chat-disabled]]'); + return callback(new Error('[[error:chat-disabled]]')); } async.waterfall([ @@ -366,20 +366,20 @@ var async = require('async'), }, function (inRoom, next) { if (!inRoom) { - return callback(null, false, '[[error:not-in-room]]'); + return next(new Error('[[error:not-in-room]]')); } user.getUserFields(uid, ['banned', 'email:confirmed'], next); }, function (userData, next) { if (parseInt(userData.banned, 10) === 1) { - return callback(null, false, '[[error:user-banned]]'); + return next(new Error('[[error:user-banned]]')); } if (parseInt(meta.config.requireEmailConfirmation, 10) === 1 && parseInt(userData['email:confirmed'], 10) !== 1) { - return callback(null, false, '[[error:email-not-confirmed-chat]]'); + return next(new Error('[[error:email-not-confirmed-chat]]')); } - next(null, true); + next(); } ], callback); }; diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 06d0ecfb55..62f4b4d2e3 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -85,21 +85,19 @@ SocketModules.chats.send = function(socket, data, callback) { socket.lastChatMessageTime = now; } - Messaging.canMessageRoom(socket.uid, data.roomId, function(err, allowed, notAllowedMessage) { - if (err || !allowed) { - return callback(err || new Error(notAllowedMessage)); - } - - Messaging.sendMessage(socket.uid, data.roomId, data.message, now, function(err, message) { - if (err) { - return callback(err); - } - + async.waterfall([ + function (next) { + Messaging.canMessageRoom(socket.uid, data.roomId, next); + }, + function (next) { + Messaging.sendMessage(socket.uid, data.roomId, data.message, now, next); + }, + function (message, next) { Messaging.notifyUsersInRoom(socket.uid, data.roomId, message); - - callback(); - }); - }); + user.updateOnlineUsers(socket.uid); + next(); + } + ], callback); }; SocketModules.chats.loadRoom = function(socket, data, callback) { @@ -217,12 +215,7 @@ SocketModules.chats.delete = function(socket, data, callback) { }; SocketModules.chats.canMessage = function(socket, roomId, callback) { - Messaging.canMessageRoom(socket.uid, roomId, function(err, allowed, notAllowedMessage) { - if (err || !allowed) { - return callback(err || new Error(notAllowedMessage)); - } - callback(); - }); + Messaging.canMessageRoom(socket.uid, roomId, callback); }; SocketModules.chats.markRead = function(socket, roomId, callback) { @@ -235,18 +228,18 @@ SocketModules.chats.markRead = function(socket, roomId, callback) { } Messaging.pushUnreadCount(socket.uid); - + // Mark notification read var nids = results.usersInRoom.filter(function(uid) { return parseInt(uid, 10) !== socket.uid; }).map(function(uid) { return 'chat_' + uid + '_' + roomId; }); - + notifications.markReadMultiple(nids, socket.uid, function() { user.notifications.pushCount(socket.uid); }); - + callback(); }); };