diff --git a/src/user/online.js b/src/user/online.js index 5e788d4c75..3f07cd619d 100644 --- a/src/user/online.js +++ b/src/user/online.js @@ -1,71 +1,40 @@ 'use strict'; -var async = require('async'); - var db = require('../database'); var topics = require('../topics'); var plugins = require('../plugins'); var meta = require('../meta'); 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.updateLastOnlineTime = async function (uid) { + const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']); + const now = Date.now(); + if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) { + return; + } + await User.setUserField(uid, 'lastonline', now); + }; + + User.updateOnlineUsers = async function (uid) { + const now = Date.now(); + const userOnlineTime = await db.sortedSetScore('users:online', uid); + if (now - parseInt(userOnlineTime, 10) < 300000) { + return; + } + await db.sortedSetAdd('users:online', now, uid); + topics.pushUnreadCount(uid); + plugins.fireHook('action:user.online', { uid: uid, timestamp: now }); + }; + + User.isOnline = async function (uid) { + const now = Date.now(); + const isArray = Array.isArray(uid); + uid = isArray ? uid : [uid]; + const lastonline = db.sortedSetScores('users:online', uid); + const isOnline = uid.map(function (uid, index) { + return (now - lastonline[index]) < (meta.config.onlineCutoff * 60000); }); - }; - 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) < (meta.config.onlineCutoff * 60000); - } - - var isOnline; - if (Array.isArray(uid)) { - isOnline = uid.map(function (uid, index) { - return checkOnline(lastonline[index]); - }); - } else { - isOnline = checkOnline(lastonline); - } - next(null, isOnline); - }, - ], callback); + return isArray ? isOnline : isOnline[0]; }; }; diff --git a/test/notifications.js b/test/notifications.js index ab495aae2f..eb03362b18 100644 --- a/test/notifications.js +++ b/test/notifications.js @@ -442,7 +442,7 @@ describe('Notifications', function () { user.notifications.getAll(uid, '', function (err, data) { meta.config.welcomeNotification = ''; assert.ifError(err); - assert.notEqual(data.indexOf('welcome_' + uid), -1); + assert(data.includes('welcome_' + uid)); done(); }); }, 1100);