From 8d6def30746dfcfda003398c55b72d38440c0f1c Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 19 Jul 2018 11:42:45 -0300 Subject: [PATCH 1/4] Fixed permalink generation on direct messages --- packages/rocketchat-lib/client/MessageAction.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-lib/client/MessageAction.js b/packages/rocketchat-lib/client/MessageAction.js index e07096f50475..f3f722990e0e 100644 --- a/packages/rocketchat-lib/client/MessageAction.js +++ b/packages/rocketchat-lib/client/MessageAction.js @@ -117,7 +117,11 @@ RocketChat.MessageAction = new class { if (!roomData) { throw new Error('room-not-found'); } - const routePath = RocketChat.roomTypes.getRouteLink(roomData.t, roomData); + + const subData = RocketChat.models.Subscriptions.findOne({rid: roomData._id, 'u._id': Meteor.userId()}); + const subOrRoomData = subData ? subData : roomData; + + const routePath = RocketChat.roomTypes.getRouteLink(roomData.t, subOrRoomData); return `${ Meteor.absoluteUrl().replace(/\/$/, '') + routePath }?msg=${ msgId }`; } }; From ce45cd2c177f01f8cdf806579a54f50d9bdd759f Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 19 Jul 2018 11:45:09 -0300 Subject: [PATCH 2/4] Permalinks on DMs now work for both users regardless of what username is on the URL --- .../rocketchat-lib/lib/roomTypes/direct.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/rocketchat-lib/lib/roomTypes/direct.js b/packages/rocketchat-lib/lib/roomTypes/direct.js index 9145751cdd16..5f31c2d0c6ff 100644 --- a/packages/rocketchat-lib/lib/roomTypes/direct.js +++ b/packages/rocketchat-lib/lib/roomTypes/direct.js @@ -18,6 +18,16 @@ export class DirectMessageRoomRoute extends RoomTypeRouteConfig { } } +const call = (method, ...args) => new Promise((resolve, reject) => { + Meteor.call(method, ...args, function(err, data) { + if (err) { + return reject(err); + } + resolve(data); + }); +}); +const getSingleMessage = async(msgId) => await call('getSingleMessage', msgId); + export class DirectMessageRoomType extends RoomTypeConfig { constructor() { super({ @@ -34,6 +44,23 @@ export class DirectMessageRoomType extends RoomTypeConfig { name: identifier }; + //If the link is to a direct message to the user itself, check if there's a msgId included + //If there's a msgId, pick the user from the message instead. + const userData = Meteor.user(); + if (query.name === userData.username && FlowRouter.getQueryParam('msg')) { + const msgId = FlowRouter.getQueryParam('msg'); + const msg = RocketChat.models.Messages.findOne(msgId) || getSingleMessage(msgId); + if (msg && msg.rid && msg.rid.indexOf(userData._id) >= 0) { + const otherUserId = msg.rid.replace(userData._id, ''); + if (otherUserId !== userData._id) { + const otherUserData = RocketChat.models.Users.findOneById(otherUserId); + if (otherUserData) { + query.name = otherUserData.username; + } + } + } + } + const subscription = RocketChat.models.Subscriptions.findOne(query); if (subscription && subscription.rid) { return ChatRoom.findOne(subscription.rid); From 616bacb2ca25e095b2ab423825f96feecc9d89ff Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 19 Jul 2018 11:49:32 -0300 Subject: [PATCH 3/4] Simplified code --- packages/rocketchat-lib/client/MessageAction.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/rocketchat-lib/client/MessageAction.js b/packages/rocketchat-lib/client/MessageAction.js index f3f722990e0e..91819b7feccc 100644 --- a/packages/rocketchat-lib/client/MessageAction.js +++ b/packages/rocketchat-lib/client/MessageAction.js @@ -119,9 +119,7 @@ RocketChat.MessageAction = new class { } const subData = RocketChat.models.Subscriptions.findOne({rid: roomData._id, 'u._id': Meteor.userId()}); - const subOrRoomData = subData ? subData : roomData; - - const routePath = RocketChat.roomTypes.getRouteLink(roomData.t, subOrRoomData); + const routePath = RocketChat.roomTypes.getRouteLink(roomData.t, subData || roomData); return `${ Meteor.absoluteUrl().replace(/\/$/, '') + routePath }?msg=${ msgId }`; } }; From bd554aa9680edd6a5244e48325604f9deece1d6d Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 20 Jul 2018 22:12:51 -0300 Subject: [PATCH 4/4] Just generate the link --- .../rocketchat-lib/client/MessageAction.js | 2 +- .../rocketchat-lib/lib/roomTypes/direct.js | 27 ------------------- .../client/lib/RoomHistoryManager.js | 8 +++++- 3 files changed, 8 insertions(+), 29 deletions(-) diff --git a/packages/rocketchat-lib/client/MessageAction.js b/packages/rocketchat-lib/client/MessageAction.js index 91819b7feccc..f08464759a42 100644 --- a/packages/rocketchat-lib/client/MessageAction.js +++ b/packages/rocketchat-lib/client/MessageAction.js @@ -120,7 +120,7 @@ RocketChat.MessageAction = new class { const subData = RocketChat.models.Subscriptions.findOne({rid: roomData._id, 'u._id': Meteor.userId()}); const routePath = RocketChat.roomTypes.getRouteLink(roomData.t, subData || roomData); - return `${ Meteor.absoluteUrl().replace(/\/$/, '') + routePath }?msg=${ msgId }`; + return `${ Meteor.absoluteUrl(routePath.replace(/^\//, '')) }?msg=${ msgId }`; } }; diff --git a/packages/rocketchat-lib/lib/roomTypes/direct.js b/packages/rocketchat-lib/lib/roomTypes/direct.js index 5f31c2d0c6ff..9145751cdd16 100644 --- a/packages/rocketchat-lib/lib/roomTypes/direct.js +++ b/packages/rocketchat-lib/lib/roomTypes/direct.js @@ -18,16 +18,6 @@ export class DirectMessageRoomRoute extends RoomTypeRouteConfig { } } -const call = (method, ...args) => new Promise((resolve, reject) => { - Meteor.call(method, ...args, function(err, data) { - if (err) { - return reject(err); - } - resolve(data); - }); -}); -const getSingleMessage = async(msgId) => await call('getSingleMessage', msgId); - export class DirectMessageRoomType extends RoomTypeConfig { constructor() { super({ @@ -44,23 +34,6 @@ export class DirectMessageRoomType extends RoomTypeConfig { name: identifier }; - //If the link is to a direct message to the user itself, check if there's a msgId included - //If there's a msgId, pick the user from the message instead. - const userData = Meteor.user(); - if (query.name === userData.username && FlowRouter.getQueryParam('msg')) { - const msgId = FlowRouter.getQueryParam('msg'); - const msg = RocketChat.models.Messages.findOne(msgId) || getSingleMessage(msgId); - if (msg && msg.rid && msg.rid.indexOf(userData._id) >= 0) { - const otherUserId = msg.rid.replace(userData._id, ''); - if (otherUserId !== userData._id) { - const otherUserData = RocketChat.models.Users.findOneById(otherUserId); - if (otherUserData) { - query.name = otherUserData.username; - } - } - } - } - const subscription = RocketChat.models.Subscriptions.findOne(query); if (subscription && subscription.rid) { return ChatRoom.findOne(subscription.rid); diff --git a/packages/rocketchat-ui/client/lib/RoomHistoryManager.js b/packages/rocketchat-ui/client/lib/RoomHistoryManager.js index 13388570c646..b779f424ec9a 100644 --- a/packages/rocketchat-ui/client/lib/RoomHistoryManager.js +++ b/packages/rocketchat-ui/client/lib/RoomHistoryManager.js @@ -161,6 +161,9 @@ export const RoomHistoryManager = new class { if (ChatMessage.findOne(message._id)) { const wrapper = $('.messages-box .wrapper'); const msgElement = $(`#${ message._id }`, wrapper); + if (msgElement.length === 0) { + return; + } const pos = (wrapper.scrollTop() + msgElement.offset().top) - (wrapper.height()/2); wrapper.animate({ scrollTop: pos @@ -190,7 +193,10 @@ export const RoomHistoryManager = new class { } return Meteor.call('loadSurroundingMessages', message, limit, function(err, result) { - for (const msg of Array.from((result != null ? result.messages : undefined) || [])) { + if (!result || result.messages) { + return; + } + for (const msg of Array.from(result.messages)) { if (msg.t !== 'command') { upsertMessage({msg, subscription}); }