From 54ee6ebdf7578caaf18f46e2953519949575bb4b Mon Sep 17 00:00:00 2001 From: knrt10 Date: Sat, 23 Mar 2019 03:47:05 +0530 Subject: [PATCH] Finally working, fixed issue --- app/livechat/server/roomType.js | 5 +++++ app/utils/lib/RoomTypeConfig.js | 13 +++++++++++++ imports/message-read-receipt/server/hooks.js | 2 +- .../message-read-receipt/server/lib/ReadReceipt.js | 8 +++++--- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/livechat/server/roomType.js b/app/livechat/server/roomType.js index be22a6cc694e4..068a3da2adbbf 100644 --- a/app/livechat/server/roomType.js +++ b/app/livechat/server/roomType.js @@ -26,6 +26,11 @@ class LivechatRoomTypeServer extends LivechatRoomType { canAccessUploadedFile({ rc_token, rc_rid } = {}) { return rc_token && rc_rid && Rooms.findOneOpenByRoomIdAndVisitorToken(rc_rid, rc_token); } + + getReadReceiptsExtraData(message) { + const { token } = message; + return { token }; + } } roomTypes.add(new LivechatRoomTypeServer()); diff --git a/app/utils/lib/RoomTypeConfig.js b/app/utils/lib/RoomTypeConfig.js index 001467dfe73bb..f59780605c7fc 100644 --- a/app/utils/lib/RoomTypeConfig.js +++ b/app/utils/lib/RoomTypeConfig.js @@ -264,4 +264,17 @@ export class RoomTypeConfig { return false; } + /** + * Get receipt's extra token for livechat users + * @param {object} message + * @return {object} Token for user + */ + getReadReceiptsExtraData(message) { + if (!Meteor.isServer) { + return {}; + } + const { token } = message; + return { token }; + } + } diff --git a/imports/message-read-receipt/server/hooks.js b/imports/message-read-receipt/server/hooks.js index c8c8001fc39b0..24c0e6e947955 100644 --- a/imports/message-read-receipt/server/hooks.js +++ b/imports/message-read-receipt/server/hooks.js @@ -13,7 +13,7 @@ callbacks.add('afterSaveMessage', (message, room) => { Subscriptions.setAsReadByRoomIdAndUserId(room._id, message.u._id); // mark message as read as well - ReadReceipt.markMessageAsReadBySender(message, room._id, message.u._id, message.token); + ReadReceipt.markMessageAsReadBySender(message, room._id, message.u._id); }); callbacks.add('afterReadMessages', (rid, { userId, lastSeen }) => { diff --git a/imports/message-read-receipt/server/lib/ReadReceipt.js b/imports/message-read-receipt/server/lib/ReadReceipt.js index 22a8d5d0d27d9..3cb2ab503d3bc 100644 --- a/imports/message-read-receipt/server/lib/ReadReceipt.js +++ b/imports/message-read-receipt/server/lib/ReadReceipt.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { ReadReceipts, Subscriptions, Messages, Rooms, Users, LivechatVisitors } from '../../../../app/models'; import { settings } from '../../../../app/settings'; +import { roomTypes } from '../../../../app/utils'; const rawReadReceipts = ReadReceipts.model.rawCollection(); @@ -40,7 +41,7 @@ export const ReadReceipt = { updateMessages(roomId); }, - markMessageAsReadBySender(message, roomId, userId, extraData) { + markMessageAsReadBySender(message, roomId, userId) { if (!settings.get('Message_Read_Receipt_Enabled')) { return; } @@ -50,6 +51,7 @@ export const ReadReceipt = { if (message.unread && message.ts < firstSubscription.ls) { Messages.setAsReadById(message._id, firstSubscription.ls); } + const extraData = roomTypes.getConfig('l').getReadReceiptsExtraData(message); this.storeReadReceipts([{ _id: message._id }], roomId, userId, extraData); }, @@ -63,7 +65,7 @@ export const ReadReceipt = { userId, messageId: message._id, ts, - token: extraData, + ...extraData, })); if (receipts.length === 0) { @@ -81,7 +83,7 @@ export const ReadReceipt = { getReceipts(message) { return ReadReceipts.findByMessageId(message._id).map((receipt) => ({ ...receipt, - user: (receipt.token && !(Object.keys(receipt.token).length === 0 && receipt.token.constructor === Object)) ? LivechatVisitors.getVisitorByToken(message.token, { fields: { username: 1, name: 1 } }) : Users.findOneById(receipt.userId, { fields: { username: 1, name: 1 } }), + user: receipt.token ? LivechatVisitors.getVisitorByToken(receipt.token, { fields: { username: 1, name: 1 } }) : Users.findOneById(receipt.userId, { fields: { username: 1, name: 1 } }), })); }, };