mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-28 09:36:16 +01:00
send messages
This commit is contained in:
@@ -34,14 +34,6 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll',
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Chats.getRecipientUid = function() {
|
|
||||||
return parseInt($('.expanded-chat').attr('data-uid'), 10);
|
|
||||||
};
|
|
||||||
|
|
||||||
Chats.isCurrentChat = function(uid) {
|
|
||||||
return Chats.getRecipientUid() === parseInt(uid, 10);
|
|
||||||
};
|
|
||||||
|
|
||||||
Chats.addEventListeners = function() {
|
Chats.addEventListeners = function() {
|
||||||
$('[component="chat/recent"]').on('click', '[component="chat/recent/room"]', function() {
|
$('[component="chat/recent"]').on('click', '[component="chat/recent/room"]', function() {
|
||||||
Chats.switchChat($(this).attr('data-roomid'));
|
Chats.switchChat($(this).attr('data-roomid'));
|
||||||
@@ -280,42 +272,11 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll',
|
|||||||
|
|
||||||
Chats.addSocketListeners = function() {
|
Chats.addSocketListeners = function() {
|
||||||
socket.on('event:chats.receive', function(data) {
|
socket.on('event:chats.receive', function(data) {
|
||||||
if (Chats.isCurrentChat(data.withUid)) {
|
if (parseInt(data.roomId, 10) === parseInt(ajaxify.data.roomId, 10)) {
|
||||||
newMessage = data.self === 0;
|
newMessage = data.self === 0;
|
||||||
data.message.self = data.self;
|
data.message.self = data.self;
|
||||||
|
|
||||||
Chats.appendChatMessage($('.expanded-chat .chat-content'), data.message);
|
Chats.appendChatMessage($('.expanded-chat .chat-content'), data.message);
|
||||||
} else {
|
|
||||||
var contactEl = $('[component="chat/recent"] li[data-uid="' + data.withUid + '"]'),
|
|
||||||
userKey = parseInt(data.withUid, 10) === parseInt(data.message.fromuid, 10) ? 'fromUser' : 'toUser';
|
|
||||||
|
|
||||||
// Spawn a new contact if required
|
|
||||||
templates.parse('partials/chat_contacts', {
|
|
||||||
contacts: [{
|
|
||||||
uid: data.message[userKey].uid,
|
|
||||||
username: data.message[userKey].username,
|
|
||||||
status: data.message[userKey].status,
|
|
||||||
picture: data.message[userKey].picture,
|
|
||||||
'icon:text': data.message[userKey]['icon:text'],
|
|
||||||
'icon:bgColor': data.message[userKey]['icon:bgColor'],
|
|
||||||
teaser: {
|
|
||||||
content: data.message.cleanedContent,
|
|
||||||
timestampISO: new Date(Date.now()).toISOString()
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}, function(html) {
|
|
||||||
translator.translate(html, function(translatedHTML) {
|
|
||||||
if (contactEl.length) {
|
|
||||||
contactEl.replaceWith(translatedHTML);
|
|
||||||
} else {
|
|
||||||
$('[component="chat/recent"]').prepend(translatedHTML);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark that contact list entry unread
|
|
||||||
$('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread').find('.timeago').timeago();
|
|
||||||
app.alternatingTitle('[[modules:chat.user_has_messaged_you, ' + data.message.fromUser.username + ']]');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,12 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra
|
|||||||
|
|
||||||
socket.on('event:chats.receive', function(data) {
|
socket.on('event:chats.receive', function(data) {
|
||||||
var username = data.message.fromUser.username;
|
var username = data.message.fromUser.username;
|
||||||
var isSelf = parseInt(data.message.fromUser.uid, 10) === parseInt(app.user.uid, 10);
|
var isSelf = data.self === 1;
|
||||||
data.message.self = data.self;
|
data.message.self = data.self;
|
||||||
if (isSelf) {
|
|
||||||
username = data.message.toUser.username;
|
|
||||||
}
|
|
||||||
newMessage = data.self === 0;
|
newMessage = data.self === 0;
|
||||||
if (module.modalExists(data.withUid)) {
|
if (module.modalExists(data.roomId)) {
|
||||||
var modal = module.getModal(data.withUid);
|
var modal = module.getModal(data.roomId);
|
||||||
|
|
||||||
Chats.appendChatMessage(modal.find('.chat-content'), data.message);
|
Chats.appendChatMessage(modal.find('.chat-content'), data.message);
|
||||||
|
|
||||||
@@ -49,8 +47,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
module.createModal({
|
module.createModal({
|
||||||
username: username,
|
roomId: data.roomId,
|
||||||
touid: data.withUid,
|
|
||||||
silent: true
|
silent: true
|
||||||
}, function(modal) {
|
}, function(modal) {
|
||||||
module.toggleNew(modal.attr('UUID'), true, true);
|
module.toggleNew(modal.attr('UUID'), true, true);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ module.exports = function(Messaging) {
|
|||||||
if (!inRoom) {
|
if (!inRoom) {
|
||||||
return next(new Error('[[error:not-allowed]]'));
|
return next(new Error('[[error:not-allowed]]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
Messaging.addMessage(uid, roomId, content, timestamp, next);
|
Messaging.addMessage(uid, roomId, content, timestamp, next);
|
||||||
}
|
}
|
||||||
], callback);
|
], callback);
|
||||||
@@ -34,11 +35,13 @@ module.exports = function(Messaging) {
|
|||||||
if (content.length > (meta.config.maximumChatMessageLength || 1000)) {
|
if (content.length > (meta.config.maximumChatMessageLength || 1000)) {
|
||||||
return callback(new Error('[[error:chat-message-too-long]]'));
|
return callback(new Error('[[error:chat-message-too-long]]'));
|
||||||
}
|
}
|
||||||
|
callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
Messaging.addMessage = function(fromuid, roomId, content, timestamp, callback) {
|
Messaging.addMessage = function(fromuid, roomId, content, timestamp, callback) {
|
||||||
var mid;
|
var mid;
|
||||||
var message;
|
var message;
|
||||||
|
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
Messaging.checkContent(content, next);
|
Messaging.checkContent(content, next);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ var nconf = require('nconf');
|
|||||||
|
|
||||||
var user = require('../user');
|
var user = require('../user');
|
||||||
var emailer = require('../emailer');
|
var emailer = require('../emailer');
|
||||||
var notifications = require('./notifications');
|
var notifications = require('../notifications');
|
||||||
var meta = require('../meta');
|
var meta = require('../meta');
|
||||||
var utils = require('../../public/src/utils');
|
var utils = require('../../public/src/utils');
|
||||||
var sockets = require('../socket.io');
|
var sockets = require('../socket.io');
|
||||||
@@ -26,7 +26,7 @@ module.exports = function(Messaging) {
|
|||||||
message: messageObj
|
message: messageObj
|
||||||
};
|
};
|
||||||
uids.forEach(function(uid) {
|
uids.forEach(function(uid) {
|
||||||
data.self = parseInt(uid, 10) === parseInt(fromUid) ? 1 : 0;
|
data.self = parseInt(uid, 10) === parseInt(fromUid) ? 1 : 0;
|
||||||
Messaging.pushUnreadCount(uid);
|
Messaging.pushUnreadCount(uid);
|
||||||
sockets.in('uid_' + uid).emit('event:chats.receive', data);
|
sockets.in('uid_' + uid).emit('event:chats.receive', data);
|
||||||
});
|
});
|
||||||
@@ -99,7 +99,6 @@ module.exports = function(Messaging) {
|
|||||||
fromUserslug: utils.slugify(messageObj.fromUser.username)
|
fromUserslug: utils.slugify(messageObj.fromUser.username)
|
||||||
}, next);
|
}, next);
|
||||||
}, callback);
|
}, callback);
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ module.exports = function(Messaging) {
|
|||||||
var keys = uids.map(function(uid) {
|
var keys = uids.map(function(uid) {
|
||||||
return 'uid:' + uid + ':chat:rooms:unread';
|
return 'uid:' + uid + ':chat:rooms:unread';
|
||||||
});
|
});
|
||||||
db.sortedSetAdd(keys, Date.now(), roomId, next);
|
|
||||||
|
db.sortedSetsAdd(keys, Date.now(), roomId, next);
|
||||||
}
|
}
|
||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -197,10 +197,20 @@ SocketModules.chats.userStopTyping = function(socket, data, callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function sendTypingNotification(event, socket, data, callback) {
|
function sendTypingNotification(event, socket, data, callback) {
|
||||||
if (!socket.uid || !data) {
|
if (!socket.uid || !data || !data.roomId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
server.in('uid_' + data.touid).emit(event, data.fromUid);
|
|
||||||
|
Messaging.getUidsInRoom(data.roomId, 0, -1, function(err, uids) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
uids.forEach(function(uid) {
|
||||||
|
if (socket.uid !== parseInt(uid, 10)) {
|
||||||
|
server.in('uid_' + uid).emit(event, data.fromUid);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketModules.chats.getRecentChats = function(socket, data, callback) {
|
SocketModules.chats.getRecentChats = function(socket, data, callback) {
|
||||||
|
|||||||
Reference in New Issue
Block a user