| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | var db = require('./database'), | 
					
						
							| 
									
										
										
										
											2013-10-17 12:05:53 -04:00
										 |  |  | 	async = require('async'), | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 	user = require('./user'), | 
					
						
							|  |  |  | 	meta = require('./meta'); | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (function(Messaging) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function sortUids(fromuid, touid) { | 
					
						
							|  |  |  | 		var uids = [fromuid, touid]; | 
					
						
							|  |  |  | 		uids.sort(); | 
					
						
							|  |  |  | 		return uids; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Messaging.addMessage = function(fromuid, touid, content, callback) { | 
					
						
							|  |  |  | 		var uids = sortUids(fromuid, touid); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 		db.incrObjectField('global', 'nextMid', function(err, mid) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(err, null); | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			var message = { | 
					
						
							|  |  |  | 				content: content, | 
					
						
							|  |  |  | 				timestamp: Date.now(), | 
					
						
							|  |  |  | 				fromuid: fromuid, | 
					
						
							|  |  |  | 				touid: touid | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 			db.setObject('message:' + mid, message); | 
					
						
							|  |  |  | 			db.listAppend('messages:' + uids[0] + ':' + uids[1], mid); | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-05 17:35:44 -05:00
										 |  |  | 			Messaging.updateChatTime(fromuid, touid); | 
					
						
							|  |  |  | 			Messaging.updateChatTime(touid, fromuid); | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 			callback(null, message); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Messaging.getMessages = function(fromuid, touid, callback) { | 
					
						
							|  |  |  | 		var uids = sortUids(fromuid, touid); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 		db.getListRange('messages:' + uids[0] + ':' + uids[1], -((meta.config.chatMessagesToDisplay || 50) - 1), -1, function(err, mids) { | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 			if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(err, null); | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			if (!mids || !mids.length) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(null, []); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			user.getUserField(touid, 'username', function(err, tousername) { | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 				if(err) { | 
					
						
							|  |  |  | 					return callback(err, null); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				var messages = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				function getMessage(mid, next) { | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 					db.getObject('message:' + mid, function(err, message) { | 
					
						
							|  |  |  | 						if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 							return next(err); | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 						if (message.fromuid === fromuid) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 							message.content = 'You : ' + message.content; | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 						} else { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 							message.content = tousername + ' : ' + message.content; | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						messages.push(message); | 
					
						
							|  |  |  | 						next(null); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				async.eachSeries(mids, getMessage, function(err) { | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 					if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 						return callback(err, null); | 
					
						
							| 
									
										
										
										
											2013-12-02 21:20:55 -05:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					callback(null, messages); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-05 17:35:44 -05:00
										 |  |  | 	Messaging.updateChatTime = function(uid, toUid, callback) { | 
					
						
							| 
									
										
										
										
											2013-12-05 21:29:51 -05:00
										 |  |  | 		db.sortedSetAdd('uid:' + uid + ':chats', Date.now(), toUid, function(err) { | 
					
						
							| 
									
										
										
										
											2013-12-05 17:35:44 -05:00
										 |  |  | 			if (callback) { | 
					
						
							|  |  |  | 				callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Messaging.getRecentChats = function(uid, callback) { | 
					
						
							| 
									
										
										
										
											2013-12-05 21:29:51 -05:00
										 |  |  | 		db.getSortedSetRevRange('uid:' + uid + ':chats', 0, 9, function(err, uids) { | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							| 
									
										
										
										
											2013-12-05 17:35:44 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-12-27 14:09:22 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			user.getMultipleUserFields(uids, ['username', 'picture', 'uid'], callback); | 
					
						
							| 
									
										
										
										
											2013-12-05 17:35:44 -05:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | }(exports)); |