user/online.js
v1.18.x
Barış Soner Uşaklı 6 years ago
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);
}; };
}; };

@ -442,7 +442,7 @@ describe('Notifications', function () {
user.notifications.getAll(uid, '', function (err, data) { user.notifications.getAll(uid, '', function (err, data) {
meta.config.welcomeNotification = ''; meta.config.welcomeNotification = '';
assert.ifError(err); assert.ifError(err);
assert.notEqual(data.indexOf('welcome_' + uid), -1); assert(data.includes('welcome_' + uid));
done(); done();
}); });
}, 1100); }, 1100);

Loading…
Cancel
Save