parent
1c5fad6dae
commit
0a690c5710
@ -1,71 +1,40 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var async = require('async');
|
|
||||||
|
|
||||||
var db = require('../database');
|
var db = require('../database');
|
||||||
var topics = require('../topics');
|
var topics = require('../topics');
|
||||||
var plugins = require('../plugins');
|
var plugins = require('../plugins');
|
||||||
var meta = require('../meta');
|
var meta = require('../meta');
|
||||||
|
|
||||||
module.exports = function (User) {
|
module.exports = function (User) {
|
||||||
User.updateLastOnlineTime = function (uid, callback) {
|
User.updateLastOnlineTime = async function (uid) {
|
||||||
callback = callback || function () {};
|
const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']);
|
||||||
db.getObjectFields('user:' + uid, ['status', 'lastonline'], function (err, userData) {
|
const now = Date.now();
|
||||||
var now = Date.now();
|
if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
|
||||||
if (err || userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
|
return;
|
||||||
return callback(err);
|
}
|
||||||
}
|
await User.setUserField(uid, 'lastonline', now);
|
||||||
User.setUserField(uid, 'lastonline', now, callback);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.updateOnlineUsers = function (uid, callback) {
|
User.updateOnlineUsers = async function (uid) {
|
||||||
callback = callback || function () {};
|
const now = Date.now();
|
||||||
|
const userOnlineTime = await db.sortedSetScore('users:online', uid);
|
||||||
var now = Date.now();
|
if (now - parseInt(userOnlineTime, 10) < 300000) {
|
||||||
async.waterfall([
|
return;
|
||||||
function (next) {
|
}
|
||||||
db.sortedSetScore('users:online', uid, next);
|
await db.sortedSetAdd('users:online', now, uid);
|
||||||
},
|
topics.pushUnreadCount(uid);
|
||||||
function (userOnlineTime, next) {
|
plugins.fireHook('action:user.online', { uid: uid, timestamp: now });
|
||||||
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) {
|
User.isOnline = async function (uid) {
|
||||||
var now = Date.now();
|
const now = Date.now();
|
||||||
async.waterfall([
|
const isArray = Array.isArray(uid);
|
||||||
function (next) {
|
uid = isArray ? uid : [uid];
|
||||||
if (Array.isArray(uid)) {
|
const lastonline = db.sortedSetScores('users:online', uid);
|
||||||
db.sortedSetScores('users:online', uid, next);
|
const isOnline = uid.map(function (uid, index) {
|
||||||
} else {
|
return (now - lastonline[index]) < (meta.config.onlineCutoff * 60000);
|
||||||
db.sortedSetScore('users:online', uid, next);
|
});
|
||||||
}
|
|
||||||
},
|
|
||||||
function (lastonline, next) {
|
|
||||||
function checkOnline(lastonline) {
|
|
||||||
return (now - lastonline) < (meta.config.onlineCutoff * 60000);
|
|
||||||
}
|
|
||||||
|
|
||||||
var isOnline;
|
return isArray ? isOnline : isOnline[0];
|
||||||
if (Array.isArray(uid)) {
|
|
||||||
isOnline = uid.map(function (uid, index) {
|
|
||||||
return checkOnline(lastonline[index]);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
isOnline = checkOnline(lastonline);
|
|
||||||
}
|
|
||||||
next(null, isOnline);
|
|
||||||
},
|
|
||||||
], callback);
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue