diff --git a/package.json b/package.json index 616c14ce15..cb83742b5b 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "nodebb-plugin-spam-be-gone": "0.4.10", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "3.0.14", - "nodebb-theme-persona": "4.1.55", - "nodebb-theme-vanilla": "5.1.36", + "nodebb-theme-persona": "4.1.56", + "nodebb-theme-vanilla": "5.1.37", "nodebb-widget-essentials": "2.0.11", "nodemailer": "2.0.0", "nodemailer-sendmail-transport": "1.0.0", diff --git a/public/src/app.js b/public/src/app.js index 7fd5bba563..46f0419709 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -281,7 +281,7 @@ app.cacheBuster = null; if (chat.modalExists(roomId)) { loadAndCenter(chat.getModal(roomId)); } else { - socket.emit('modules.chats.loadRoom', {roomId: roomId}, function(err, roomData) { + socket.emit('modules.chats.loadRoom', {roomId: roomId, uid: uid || app.user.uid}, function(err, roomData) { if (err) { return app.alertError(err.message); } diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 80e3b8fe74..6034eacfb0 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -154,131 +154,117 @@ define('chat', [ return $('#chat-modal-' + roomId).length !== 0; }; - function checkStatus(chatModal) { - socket.emit('user.checkStatus', chatModal.attr('touid'), function(err, status) { - if (err) { - return app.alertError(err.message); - } - - app.updateUserStatus(chatModal.find('[component="user/status"]'), status); - }); - } - module.createModal = function(data, callback) { - templates.parse('chat', data, function(chatTpl) { - translator.translate(chatTpl, function (chatTpl) { - - var chatModal = $(chatTpl), - uuid = utils.generateUUID(), - dragged = false; - - chatModal.attr('id', 'chat-modal-' + data.roomId); - chatModal.attr('roomId', data.roomId); - chatModal.attr('intervalId', 0); - chatModal.attr('UUID', uuid); - chatModal.css('position', 'fixed'); - chatModal.css('zIndex', 100); - chatModal.appendTo($('body')); - module.center(chatModal); - - app.loadJQueryUI(function() { - chatModal.find('.modal-content').resizable({ - handles: 'n, e, s, w, se', - minHeight: 250, - minWidth: 400 - }); - - chatModal.find('.modal-content').on('resize', function(event, ui) { - if (ui.originalSize.height === ui.size.height) { - return; - } + app.parseAndTranslate('chat', data, function(chatModal) { + + var uuid = utils.generateUUID(); + var dragged = false; + + chatModal.attr('id', 'chat-modal-' + data.roomId); + chatModal.attr('roomId', data.roomId); + chatModal.attr('intervalId', 0); + chatModal.attr('UUID', uuid); + chatModal.css('position', 'fixed'); + chatModal.css('zIndex', 100); + chatModal.appendTo($('body')); + chatModal.find('.timeago').timeago(); + module.center(chatModal); + + app.loadJQueryUI(function() { + chatModal.find('.modal-content').resizable({ + handles: 'n, e, s, w, se', + minHeight: 250, + minWidth: 400 + }); - chatModal.find('.chat-content').css('height', module.calculateChatListHeight(chatModal)); - }); + chatModal.find('.modal-content').on('resize', function(event, ui) { + if (ui.originalSize.height === ui.size.height) { + return; + } - chatModal.draggable({ - start:function() { - module.bringModalToTop(chatModal); - }, - stop:function() { - chatModal.find('#chat-message-input').focus(); - }, - distance: 10, - handle: '.modal-header' - }); + chatModal.find('.chat-content').css('height', module.calculateChatListHeight(chatModal)); }); - chatModal.find('#chat-close-btn').on('click', function() { - module.close(chatModal); + chatModal.draggable({ + start:function() { + module.bringModalToTop(chatModal); + }, + stop:function() { + chatModal.find('#chat-message-input').focus(); + }, + distance: 10, + handle: '.modal-header' }); + }); - function gotoChats() { - var text = components.get('chat/input').val(); - $(window).one('action:ajaxify.end', function() { - components.get('chat/input').val(text); - }); + chatModal.find('#chat-close-btn').on('click', function() { + module.close(chatModal); + }); - ajaxify.go('user/' + app.user.userslug + '/chats/' + chatModal.attr('roomId')); - module.close(chatModal); - } + function gotoChats() { + var text = components.get('chat/input').val(); + $(window).one('action:ajaxify.end', function() { + components.get('chat/input').val(text); + }); - chatModal.find('.modal-header').on('dblclick', gotoChats); - chatModal.find('button[data-action="maximize"]').on('click', gotoChats); + ajaxify.go('user/' + app.user.userslug + '/chats/' + chatModal.attr('roomId')); + module.close(chatModal); + } - chatModal.on('click', function() { - module.bringModalToTop(chatModal); + chatModal.find('.modal-header').on('dblclick', gotoChats); + chatModal.find('button[data-action="maximize"]').on('click', gotoChats); - if (dragged) { - dragged = false; - } - }); + chatModal.on('click', function() { + module.bringModalToTop(chatModal); - chatModal.on('mousemove', function(e) { - if (e.which === 1) { - dragged = true; - } - }); + if (dragged) { + dragged = false; + } + }); - chatModal.on('mousemove keypress click', function() { - if (newMessage) { - socket.emit('modules.chats.markRead', data.roomId); - newMessage = false; - } - }); + chatModal.on('mousemove', function(e) { + if (e.which === 1) { + dragged = true; + } + }); - Chats.addEditDeleteHandler(chatModal.find('[component="chat/messages"]'), data.roomId); + chatModal.on('mousemove keypress click', function() { + if (newMessage) { + socket.emit('modules.chats.markRead', data.roomId); + newMessage = false; + } + }); - chatModal.find('[component="chat/controlsToggle"]').on('click', function() { - var messagesEl = chatModal.find('[component="chat/messages"]'); + Chats.addEditDeleteHandler(chatModal.find('[component="chat/messages"]'), data.roomId); - chatModal.find('[component="chat/controls"]').toggle(); - messagesEl.css('height', module.calculateChatListHeight(chatModal)); - }); + chatModal.find('[component="chat/controlsToggle"]').on('click', function() { + var messagesEl = chatModal.find('[component="chat/messages"]'); - Chats.addRenameHandler(chatModal.attr('roomId'), chatModal.find('[component="chat/room/name"]')); + chatModal.find('[component="chat/controls"]').toggle(); + messagesEl.css('height', module.calculateChatListHeight(chatModal)); + }); - Chats.addSendHandlers(chatModal.attr('roomId'), chatModal.find('#chat-message-input'), chatModal.find('#chat-message-send-btn')); + Chats.addRenameHandler(chatModal.attr('roomId'), chatModal.find('[component="chat/room/name"]')); - Chats.createTagsInput(chatModal.find('.users-tag-input'), data); - Chats.createAutoComplete(chatModal.find('[component="chat/input"]')); + Chats.addSendHandlers(chatModal.attr('roomId'), chatModal.find('#chat-message-input'), chatModal.find('#chat-message-send-btn')); - Chats.addScrollHandler(chatModal.attr('roomId'), data.uid, chatModal.find('.chat-content')); + Chats.createTagsInput(chatModal.find('.users-tag-input'), data); + Chats.createAutoComplete(chatModal.find('[component="chat/input"]')); - checkStatus(chatModal); + Chats.addScrollHandler(chatModal.attr('roomId'), data.uid, chatModal.find('.chat-content')); - taskbar.push('chat', chatModal.attr('UUID'), { - title: data.users.length ? data.users[0].username : '', - roomId: data.roomId, - icon: 'fa-comment', - state: '' - }); + taskbar.push('chat', chatModal.attr('UUID'), { + title: data.users.length ? data.users[0].username : '', + roomId: data.roomId, + icon: 'fa-comment', + state: '' + }); - $(window).trigger('action:chat.loaded', chatModal); + $(window).trigger('action:chat.loaded', chatModal); - if (typeof callback === 'function') { - callback(chatModal); - } - }); + if (typeof callback === 'function') { + callback(chatModal); + } }); }; diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js index 12ea675e8d..ddde8efb5e 100644 --- a/src/controllers/accounts/chats.js +++ b/src/controllers/accounts/chats.js @@ -60,7 +60,6 @@ chatsController.get = function(req, res, callback) { callerUid: req.uid, uid: uid, roomId: req.params.roomid, - since: 'recent', isNew: false }), room: async.apply(messaging.getRoomData, req.params.roomid) diff --git a/src/messaging.js b/src/messaging.js index 532b375b41..ae554f7359 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -22,13 +22,6 @@ var userNotifications = require('./user/notifications'); require('./messaging/unread')(Messaging); require('./messaging/notifications')(Messaging); - var terms = { - day: 86400000, - week: 604800000, - month: 2592000000, - threemonths: 7776000000 - }; - Messaging.getMessageField = function(mid, field, callback) { Messaging.getMessageFields(mid, [field], function(err, fields) { callback(err, fields ? fields[field] : null); @@ -50,18 +43,11 @@ var userNotifications = require('./user/notifications'); Messaging.getMessages = function(params, callback) { var uid = params.uid; var roomId = params.roomId; - var since = params.since; var isNew = params.isNew || false; var start = params.hasOwnProperty('start') ? params.start : 0; - var count = params.count || 250; + var stop = parseInt(start, 10) + ((params.count || 50) - 1); var markRead = params.markRead || true; - var min = params.count ? 0 : Date.now() - (terms[since] || terms.day); - - if (since === 'recent') { - count = 50; - min = 0; - } var indices = {}; async.waterfall([ function(next) { @@ -71,7 +57,7 @@ var userNotifications = require('./user/notifications'); if (!canGet) { return callback(null, null); } - db.getSortedSetRevRangeByScore('uid:' + uid + ':chat:room:' + roomId + ':mids', start, count, '+inf', min, next); + db.getSortedSetRevRange('uid:' + uid + ':chat:room:' + roomId + ':mids', start, stop, next); }, function(mids, next) { if (!Array.isArray(mids) || !mids.length) { diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 4f8e0ab130..d2097ff800 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -115,11 +115,18 @@ SocketModules.chats.loadRoom = function(socket, data, callback) { async.parallel({ roomData: async.apply(Messaging.getRoomData, data.roomId), - users: async.apply(Messaging.getUsersInRoom, data.roomId, 0, -1) + users: async.apply(Messaging.getUsersInRoom, data.roomId, 0, -1), + messages: async.apply(Messaging.getMessages, { + callerUid: socket.uid, + uid: data.uid || socket.uid, + roomId: data.roomId, + isNew: false + }), }, next); }, function (results, next) { results.roomData.users = results.users; + results.roomData.messages = results.messages; 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; @@ -312,10 +319,6 @@ SocketModules.chats.getMessages = function(socket, data, callback) { markRead: false }; - if (data.hasOwnProperty('since')) { - params.since = data.since; - } - if (data.hasOwnProperty('markRead')) { params.markRead = data.markRead; }