mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
partial fix to #1874
This commit is contained in:
@@ -33,6 +33,12 @@ var db = require('./database'),
|
|||||||
return callback(err);
|
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) {
|
db.setObject('message:' + mid, message, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -44,6 +50,7 @@ var db = require('./database'),
|
|||||||
return callback(err);
|
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) {
|
db.getListRange('messages:recent:' + fromuid, 0, -1, function(err, list) {
|
||||||
if (list.length > 10) {
|
if (list.length > 10) {
|
||||||
db.listRemoveLast('messages:recent:' + uids[0]);
|
db.listRemoveLast('messages:recent:' + uids[0]);
|
||||||
@@ -101,24 +108,38 @@ var db = require('./database'),
|
|||||||
return 'message:' + mid;
|
return 'message:' + mid;
|
||||||
});
|
});
|
||||||
|
|
||||||
db.getObjects(keys, function(err, messages) {
|
async.waterfall([
|
||||||
if (err) {
|
async.apply(db.getObjects, keys),
|
||||||
return callback(err);
|
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;
|
||||||
|
|
||||||
async.map(messages, function(message, next) {
|
Messaging.parse(message.content, message.fromuid, fromuid, userData[1], userData[0], isNew, function(result) {
|
||||||
var self = parseInt(message.fromuid, 10) === parseInt(fromuid, 10);
|
message.content = result;
|
||||||
message.fromUser = self ? userData[0] : userData[1];
|
next(null, message);
|
||||||
message.toUser = self ? userData[1] : userData[0];
|
});
|
||||||
message.timestampISO = new Date(parseInt(message.timestamp, 10)).toISOString();
|
}, next);
|
||||||
message.self = self ? 1 : 0;
|
},
|
||||||
|
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) {
|
return message;
|
||||||
message.content = result;
|
|
||||||
next(null, message);
|
|
||||||
});
|
});
|
||||||
}, callback);
|
|
||||||
});
|
next(undefined, messages);
|
||||||
|
}
|
||||||
|
], callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user