You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
var async = require('async');
|
|
|
|
var db = require('../database');
|
|
var topics = require('../topics');
|
|
var plugins = require('../plugins');
|
|
|
|
module.exports = function (User) {
|
|
User.updateLastOnlineTime = function (uid, callback) {
|
|
callback = callback || function () {};
|
|
db.getObjectFields('user:' + uid, ['status', 'lastonline'], function (err, userData) {
|
|
var now = Date.now();
|
|
if (err || userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
|
|
return callback(err);
|
|
}
|
|
User.setUserField(uid, 'lastonline', now, callback);
|
|
});
|
|
};
|
|
|
|
User.updateOnlineUsers = function (uid, callback) {
|
|
callback = callback || function () {};
|
|
|
|
var now = Date.now();
|
|
async.waterfall([
|
|
function (next) {
|
|
db.sortedSetScore('users:online', uid, next);
|
|
},
|
|
function (userOnlineTime, next) {
|
|
if (now - parseInt(userOnlineTime, 10) < 300000) {
|
|
return callback();
|
|
}
|
|
db.sortedSetAdd('users:online', now, uid, next);
|
|
},
|
|
function (next) {
|
|
topics.pushUnreadCount(uid);
|
|
plugins.fireHook('action:user.online', { uid: uid, timestamp: now });
|
|
next();
|
|
},
|
|
], callback);
|
|
};
|
|
|
|
User.isOnline = function (uid, callback) {
|
|
var now = Date.now();
|
|
async.waterfall([
|
|
function (next) {
|
|
if (Array.isArray(uid)) {
|
|
db.sortedSetScores('users:online', uid, next);
|
|
} else {
|
|
db.sortedSetScore('users:online', uid, next);
|
|
}
|
|
},
|
|
function (lastonline, next) {
|
|
function checkOnline(lastonline) {
|
|
return now - lastonline < 300000;
|
|
}
|
|
|
|
var isOnline;
|
|
if (Array.isArray(uid)) {
|
|
isOnline = uid.map(function (uid, index) {
|
|
return checkOnline(lastonline[index]);
|
|
});
|
|
} else {
|
|
isOnline = checkOnline(lastonline);
|
|
}
|
|
next(null, isOnline);
|
|
},
|
|
], callback);
|
|
};
|
|
};
|