From 086ebb7e5a1e6b071e33d6ac1fcce2bfb339bd29 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 25 Jul 2014 15:37:46 -0400 Subject: [PATCH] closed #1874 --- src/messaging.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/messaging.js b/src/messaging.js index 89621d6ea0..25c68ae64a 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -74,7 +74,10 @@ var db = require('./database'), } getMessages([mid], fromuid, touid, true, function(err, messages) { - callback(err, messages ? messages[0] : null); + Messaging.isNewSet(fromuid, touid, mid, function(err, isNewSet) { + messages[0].newSet = isNewSet; + callback(err, messages ? messages[0] : null); + }); }); }); }); @@ -166,6 +169,32 @@ var db = require('./database'), }); }; + Messaging.isNewSet = function(fromuid, touid, mid, callback) { + var uids = sortUids(fromuid, touid), + setKey = 'messages:uid:' + uids[0] + ':to:' + uids[1]; + + async.waterfall([ + async.apply(db.sortedSetRank, setKey, mid), + function(index, next) { + if (index > 0) { + db.getSortedSetRange(setKey, index-1, index, next); + } else { + next(null, true); + } + }, + function(mids, next) { + db.getObjects(['message:' + mids[0], 'message:' + mids[1]], next); + }, + function(messages, next) { + if (typeof messages !== 'boolean') { + next(null, parseInt(messages[1].timestamp, 10) > parseInt(messages[0].timestamp, 10) + (1000*60*5)); + } else { + next(null, messages); + } + } + ], callback); + }; + Messaging.updateChatTime = function(uid, toUid, callback) { callback = callback || function() {}; db.sortedSetAdd('uid:' + uid + ':chats', Date.now(), toUid, callback);