diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js index 7ff867134c..b1d23ebeb3 100644 --- a/src/controllers/accounts/chats.js +++ b/src/controllers/accounts/chats.js @@ -74,6 +74,7 @@ chatsController.get = function(req, res, callback) { return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== req.uid; }); + room.groupChat = room.hasOwnProperty('groupChat') ? room.groupChat : room.users.length > 2; room.rooms = recentChats.rooms; room.uid = uid; room.userslug = req.params.userslug; diff --git a/src/messaging.js b/src/messaging.js index 2fe69e50fe..e2be899b46 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -265,7 +265,7 @@ var async = require('async'), }, users: function(next) { async.map(roomIds, function(roomId, next) { - db.getSortedSetRevRange('chat:room:' + roomId + ':uids', 0, 3, function(err, uids) { + db.getSortedSetRevRange('chat:room:' + roomId + ':uids', 0, 9, function(err, uids) { if (err) { return next(err); } diff --git a/src/messaging/rooms.js b/src/messaging/rooms.js index 54423a2673..7433da44c6 100644 --- a/src/messaging/rooms.js +++ b/src/messaging/rooms.js @@ -13,10 +13,7 @@ module.exports = function(Messaging) { if (err || !data) { return callback(err || new Error('[[error:no-chat-room]]')); } - data.roomName = data.roomName || '[[modules:chat.roomname, ' + roomId + ']]'; - if (data.roomName) { - data.roomName = validator.escape(String(data.roomName)); - } + modifyRoomData([data]); callback(null, data); }); }; @@ -29,16 +26,23 @@ module.exports = function(Messaging) { if (err) { return callback(err); } - roomData.forEach(function(data) { - if (data) { - data.roomName = data.roomName || '[[modules:chat.roomname, ' + data.roomId + ']]'; - data.roomName = validator.escape(String(data.roomName)); - } - }); + modifyRoomData(roomData); callback(null, roomData); }); }; + function modifyRoomData(rooms) { + rooms.forEach(function(data) { + if (data) { + data.roomName = data.roomName || '[[modules:chat.roomname, ' + data.roomId + ']]'; + data.roomName = validator.escape(String(data.roomName)); + if (data.hasOwnProperty('groupChat')) { + data.groupChat = parseInt(data.groupChat, 10) === 1; + } + } + }); + } + Messaging.newRoom = function(uid, toUids, callback) { var roomId; var now = Date.now(); @@ -105,6 +109,18 @@ module.exports = function(Messaging) { return now; }); db.sortedSetAdd('chat:room:' + roomId + ':uids', timestamps, uids, next); + }, + function(next) { + async.parallel({ + userCount: async.apply(db.sortedSetCard, 'chat:room:' + roomId + ':uids'), + roomData: async.apply(db.getObject, 'chat:room:' + roomId) + }, next); + }, + function(results, next) { + if (!results.roomData.hasOwnProperty('groupChat') && results.userCount > 2) { + return db.setObjectField('chat:room:' + roomId, 'groupChat', 1, next); + } + next(); } ], callback); }; diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 3a1e711b45..8825ee4bcb 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -133,6 +133,7 @@ SocketModules.chats.loadRoom = function(socket, data, callback) { }, function (results, next) { results.roomData.users = results.users; + results.roomData.groupChat = results.roomData.hasOwnProperty('groupChat') ? results.roomData.groupChat : results.users.length > 2; results.roomData.isOwner = parseInt(results.roomData.owner, 10) === socket.uid; results.roomData.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0; results.roomData.showUserInput = !results.roomData.maximumUsersInChatRoom || results.roomData.maximumUsersInChatRoom > 2;