partial fix to #1874

v1.18.x
Julian Lam 11 years ago
parent 3bfad766b3
commit a79bb29216

@ -33,6 +33,12 @@ var db = require('./database'),
return callback(err);
}
/*
TODO: Here I'd check the score of the previous message in this chat's sorted set.
but unfortunately, chats are stored as a list. Once nodebb/nodebb#1902 is resolved,
I can finish it up here.
*/
db.setObject('message:' + mid, message, function(err) {
if (err) {
return callback(err);
@ -44,6 +50,7 @@ var db = require('./database'),
return callback(err);
}
// Truncate recent chats list back down to 10 (should use LTRIM, see nodebb/nodebb#1901)
db.getListRange('messages:recent:' + fromuid, 0, -1, function(err, list) {
if (list.length > 10) {
db.listRemoveLast('messages:recent:' + uids[0]);
@ -101,24 +108,38 @@ var db = require('./database'),
return 'message:' + mid;
});
db.getObjects(keys, function(err, messages) {
if (err) {
return callback(err);
}
async.map(messages, function(message, next) {
var self = parseInt(message.fromuid, 10) === parseInt(fromuid, 10);
message.fromUser = self ? userData[0] : userData[1];
message.toUser = self ? userData[1] : userData[0];
message.timestampISO = new Date(parseInt(message.timestamp, 10)).toISOString();
message.self = self ? 1 : 0;
async.waterfall([
async.apply(db.getObjects, keys),
function(messages, next) {
async.map(messages, function(message, next) {
var self = parseInt(message.fromuid, 10) === parseInt(fromuid, 10);
message.fromUser = self ? userData[0] : userData[1];
message.toUser = self ? userData[1] : userData[0];
message.timestampISO = new Date(parseInt(message.timestamp, 10)).toISOString();
message.self = self ? 1 : 0;
message.newSet = false;
Messaging.parse(message.content, message.fromuid, fromuid, userData[1], userData[0], isNew, function(result) {
message.content = result;
next(null, message);
});
}, next);
},
function(messages, next) {
// Add a spacer in between messages with time gaps between them
messages = messages.map(function(message, index) {
// Compare timestamps with the previous message, and check if a spacer needs to be added
if (index > 0 && parseInt(message.timestamp, 10) > parseInt(messages[index-1].timestamp, 10) + (1000*60*5)) {
// If it's been 5 minutes, this is a new set of messages
message.newSet = true;
}
Messaging.parse(message.content, message.fromuid, fromuid, userData[1], userData[0], isNew, function(result) {
message.content = result;
next(null, message);
return message;
});
}, callback);
});
next(undefined, messages);
}
], callback);
});
}

Loading…
Cancel
Save