Improvements to pinned items

pull/4045/head
Marcelo Schmidt 10 years ago
parent 75f489a283
commit 1f6fd45924
No known key found for this signature in database
GPG Key ID: CA48C21A7B66097E
  1. 4
      packages/rocketchat-lib/server/models/Messages.coffee
  2. 19
      packages/rocketchat-message-pin/server/pinMessage.coffee
  3. 29
      packages/rocketchat-slackbridge/slackbridge.js

@ -171,14 +171,14 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base
return @update query, update
setPinnedByIdAndUserId: (_id, pinnedBy, pinned=true) ->
setPinnedByIdAndUserId: (_id, pinnedBy, pinned=true, pinnedAt=0) ->
query =
_id: _id
update =
$set:
pinned: pinned
pinnedAt: new Date
pinnedAt: pinnedAt || new Date
pinnedBy: pinnedBy
return @update query, update

@ -1,5 +1,5 @@
Meteor.methods
pinMessage: (message, createMessagePinnedMessage = true) ->
pinMessage: (message, pinnedAt) ->
if not Meteor.userId()
throw new Meteor.Error('error-invalid-user', "Invalid user", { method: 'pinMessage' })
@ -18,7 +18,7 @@ Meteor.methods
me = RocketChat.models.Users.findOneById Meteor.userId()
message.pinned = true
message.pinnedAt = Date.now
message.pinnedAt = pinnedAt || Date.now
message.pinnedBy =
_id: Meteor.userId()
username: me.username
@ -27,14 +27,13 @@ Meteor.methods
RocketChat.models.Messages.setPinnedByIdAndUserId message._id, message.pinnedBy, message.pinned
if createMessagePinnedMessage
RocketChat.models.Messages.createWithTypeRoomIdMessageAndUser 'message_pinned', message.rid, '', me,
attachments: [
"text" : message.msg
"author_name" : message.u.username,
"author_icon" : getAvatarUrlFromUsername(message.u.username),
"ts" : message.ts
]
RocketChat.models.Messages.createWithTypeRoomIdMessageAndUser 'message_pinned', message.rid, '', me,
attachments: [
"text" : message.msg
"author_name" : message.u.username,
"author_icon" : getAvatarUrlFromUsername(message.u.username),
"ts" : message.ts
]
unpinMessage: (message) ->
if not Meteor.userId()

@ -254,13 +254,17 @@ class SlackBridge {
if (message.subtype === 'bot_message') {
user = RocketChat.models.Users.findOneById('rocket.cat', { fields: { username: 1 } });
}
logger.class.debug('Send RocketChat message', msgObj);
if (message.pinned_to && message.pinned_to.indexOf(message.channel) !== -1) {
msgObj.pinned = true;
msgObj.pinnedAt = Date.now;
msgObj.pinnedBy = _.pick(user, '_id', 'username');
}
RocketChat.sendMessage(user, msgObj, room, true);
}
}
saveMessage(message) {
logger.class.debug('Save message', message);
let channel = message.channel ? this.findChannel(message.channel) || this.addChannel(message.channel) : null;
let user = null;
if (message.subtype === 'message_deleted' || message.subtype === 'message_changed') {
@ -366,18 +370,24 @@ class SlackBridge {
case 'pinned_item':
if (message.attachments && message.attachments[0] && message.attachments[0].text) {
msgObj = {
_id: `slack-${message.attachments[0].channel_id}-${message.attachments[0].ts.replace(/\./g, '-')}`,
ts: new Date(parseInt(message.attachments[0].ts.split('.')[0]) * 1000),
rid: room._id,
msg: this.convertSlackMessageToRocketChat(message.attachments[0].text),
t: 'message_pinned',
msg: '',
u: {
_id: user._id,
username: user.username
}
},
attachments: [{
'text' : this.convertSlackMessageToRocketChat(message.attachments[0].text),
'author_name' : message.attachments[0].author_subname,
'author_icon' : getAvatarUrlFromUsername(message.attachments[0].author_subname),
'ts' : new Date(parseInt(message.attachments[0].ts.split('.')[0]) * 1000)
}]
};
Meteor.runAsUser(user._id, () => {
Meteor.call('pinMessage', msgObj, false);
});
RocketChat.models.Messages.setPinnedByIdAndUserId(`slack-${message.attachments[0].channel_id}-${message.attachments[0].ts.replace(/\./g, '-')}`, msgObj.u, true, new Date(parseInt(message.ts.split('.')[0]) * 1000));
return msgObj;
} else {
logger.events.error('Pinned item with no attachment');
}
@ -778,6 +788,7 @@ class SlackBridge {
if (response && response.data && _.isArray(response.data.messages) && response.data.messages.length > 0) {
let latest = 0;
for (let message of response.data.messages.reverse()) {
logger.class.debug('MESSAGE: ', message);
if (!latest || message.ts > latest) {
latest = message.ts;
}

Loading…
Cancel
Save