fix: allow guests to see their replies immediately

v1.18.x
Barış Soner Uşaklı 4 years ago
parent 7b39cf4bb7
commit a4fe4d3cf5

@ -8,6 +8,7 @@ const meta = require('../meta');
const apiHelpers = require('./helpers'); const apiHelpers = require('./helpers');
const doTopicAction = apiHelpers.doTopicAction; const doTopicAction = apiHelpers.doTopicAction;
const websockets = require('../socket.io');
const socketHelpers = require('../socket.io/helpers'); const socketHelpers = require('../socket.io/helpers');
const topicsAPI = module.exports; const topicsAPI = module.exports;
@ -72,7 +73,12 @@ topicsAPI.reply = async function (caller, data) {
}; };
user.updateOnlineUsers(caller.uid); user.updateOnlineUsers(caller.uid);
if (caller.uid) {
socketHelpers.emitToUids('event:new_post', result, [caller.uid]); socketHelpers.emitToUids('event:new_post', result, [caller.uid]);
} else if (caller.uid === 0 && caller.sessionID) {
websockets.in('sess_' + caller.sessionID).emit('event:new_post', result);
}
socketHelpers.notifyNew(caller.uid, 'newPost', result); socketHelpers.notifyNew(caller.uid, 'newPost', result);
return postObj[0]; return postObj[0];

@ -198,14 +198,15 @@ async function authorize(socket, callback) {
} }
await cookieParserAsync(request); await cookieParserAsync(request);
const sid = request.signedCookies[nconf.get('sessionKey')];
const sessionData = await getSessionAsync(request.signedCookies[nconf.get('sessionKey')]); const sessionData = await getSessionAsync(sid);
if (sessionData && sessionData.passport && sessionData.passport.user) { if (sessionData && sessionData.passport && sessionData.passport.user) {
request.session = sessionData; request.session = sessionData;
socket.uid = parseInt(sessionData.passport.user, 10); socket.uid = parseInt(sessionData.passport.user, 10);
} else { } else {
socket.uid = 0; socket.uid = 0;
} }
socket.sessionID = sid;
request.uid = socket.uid; request.uid = socket.uid;
callback(); callback();
} }

@ -7,6 +7,9 @@ var meta = require('../meta');
module.exports = function (User) { module.exports = function (User) {
User.updateLastOnlineTime = async function (uid) { User.updateLastOnlineTime = async function (uid) {
if (!(parseInt(uid, 10) > 0)) {
return;
}
const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']); const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']);
const now = Date.now(); const now = Date.now();
if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) { if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
@ -16,6 +19,9 @@ module.exports = function (User) {
}; };
User.updateOnlineUsers = async function (uid) { User.updateOnlineUsers = async function (uid) {
if (!(parseInt(uid, 10) > 0)) {
return;
}
const now = Date.now(); const now = Date.now();
const userOnlineTime = await db.sortedSetScore('users:online', uid); const userOnlineTime = await db.sortedSetScore('users:online', uid);
if (now - parseInt(userOnlineTime, 10) < 300000) { if (now - parseInt(userOnlineTime, 10) < 300000) {

Loading…
Cancel
Save