diff --git a/packages/rocketchat-message-mark-as-unread/client/actionButton.coffee b/packages/rocketchat-message-mark-as-unread/client/actionButton.coffee deleted file mode 100644 index 3dec96d2ccd84edc29c8ea69312d79b52c087c0f..0000000000000000000000000000000000000000 --- a/packages/rocketchat-message-mark-as-unread/client/actionButton.coffee +++ /dev/null @@ -1,23 +0,0 @@ -Meteor.startup -> - RocketChat.MessageAction.addButton - id: 'mark-message-as-unread' - icon: 'icon-flag' - i18nLabel: 'Mark_as_unread' - context: [ - 'message' - 'message-mobile' - ] - action: (event, instance) -> - message = @_arguments[1] - RocketChat.MessageAction.hideDropDown() - Meteor.call 'unreadMessages', message, (error, result) -> - if error - return handleError(error) - subscription = ChatSubscription.findOne rid: message.rid - if not subscription? - return - RoomManager.close subscription.t + subscription.name - FlowRouter.go('home') - validation: (message) -> - return message.u._id isnt Meteor.user()._id - order: 22 diff --git a/packages/rocketchat-message-mark-as-unread/client/actionButton.js b/packages/rocketchat-message-mark-as-unread/client/actionButton.js new file mode 100644 index 0000000000000000000000000000000000000000..0cdb0b54cb2f3d3b3ac0eefe9395b86b9aeb23da --- /dev/null +++ b/packages/rocketchat-message-mark-as-unread/client/actionButton.js @@ -0,0 +1,29 @@ +Meteor.startup(() => { + return RocketChat.MessageAction.addButton({ + id: 'mark-message-as-unread', + icon: 'icon-flag', + i18nLabel: 'Mark_as_unread', + context: ['message', 'message-mobile'], + action() { + const message = this._arguments[1]; + RocketChat.MessageAction.hideDropDown(); + return Meteor.call('unreadMessages', message, function(error) { + if (error) { + return handleError(error); + } + const subscription = ChatSubscription.findOne({ + rid: message.rid + }); + if (subscription == null) { + return; + } + RoomManager.close(subscription.t + subscription.name); + return FlowRouter.go('home'); + }); + }, + validation(message) { + return message.u._id !== Meteor.user()._id; + }, + order: 22 + }); +}); diff --git a/packages/rocketchat-message-mark-as-unread/package.js b/packages/rocketchat-message-mark-as-unread/package.js index 36da7db18ffe2bc90eea48de98927449ebf3854b..fd2d458d114a757f411c62bf5dae2c4592db8a15 100644 --- a/packages/rocketchat-message-mark-as-unread/package.js +++ b/packages/rocketchat-message-mark-as-unread/package.js @@ -6,10 +6,7 @@ Package.describe({ Package.onUse(function(api) { api.use([ - 'coffeescript', 'ecmascript', - 'underscore', - 'less', 'rocketchat:lib', 'rocketchat:logger', 'rocketchat:ui' @@ -18,11 +15,11 @@ Package.onUse(function(api) { api.use('templating', 'client'); api.addFiles([ - 'client/actionButton.coffee' + 'client/actionButton.js' ], 'client'); api.addFiles([ 'server/logger.js', - 'server/unreadMessages.coffee' + 'server/unreadMessages.js' ], 'server'); }); diff --git a/packages/rocketchat-message-mark-as-unread/server/logger.js b/packages/rocketchat-message-mark-as-unread/server/logger.js index a1a5b63fe348123722a8215dfce73cab90fc71bc..2e92f980640de13cd0cd7630f190c98ae3345a02 100644 --- a/packages/rocketchat-message-mark-as-unread/server/logger.js +++ b/packages/rocketchat-message-mark-as-unread/server/logger.js @@ -1,9 +1,7 @@ -/* globals logger:true */ -/* exported logger */ - -logger = new Logger('MessageMarkAsUnread', { +const logger = new Logger('MessageMarkAsUnread', { sections: { connection: 'Connection', events: 'Events' } }); +export default logger; diff --git a/packages/rocketchat-message-mark-as-unread/server/unreadMessages.coffee b/packages/rocketchat-message-mark-as-unread/server/unreadMessages.coffee deleted file mode 100644 index 9c1cf55d66fe652061eba0ecd77a21c060b130f3..0000000000000000000000000000000000000000 --- a/packages/rocketchat-message-mark-as-unread/server/unreadMessages.coffee +++ /dev/null @@ -1,19 +0,0 @@ -Meteor.methods - unreadMessages: (firstUnreadMessage) -> - if not Meteor.userId() - throw new Meteor.Error 'error-invalid-user', 'Invalid user', { method: 'unreadMessages' } - - originalMessage = RocketChat.models.Messages.findOneById firstUnreadMessage._id, {fields: {u: 1, rid: 1, file: 1, ts: 1}} - if not originalMessage? - throw new Meteor.Error 'error-action-not-allowed', 'Not allowed', { method: 'unreadMessages', action: 'Unread_messages' } - - if Meteor.userId() is originalMessage.u._id - throw new Meteor.Error 'error-action-not-allowed', 'Not allowed', { method: 'unreadMessages', action: 'Unread_messages' } - - lastSeen = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(originalMessage.rid, Meteor.userId()).ls - if firstUnreadMessage.ts >= lastSeen - logger.connection.debug('Provided message is already marked as unread') - return - - logger.connection.debug('Updating unread message of ' + originalMessage.ts + ' as the first unread') - RocketChat.models.Subscriptions.setAsUnreadByRoomIdAndUserId(originalMessage.rid, Meteor.userId(), originalMessage.ts) diff --git a/packages/rocketchat-message-mark-as-unread/server/unreadMessages.js b/packages/rocketchat-message-mark-as-unread/server/unreadMessages.js new file mode 100644 index 0000000000000000000000000000000000000000..befaab73f6dae7aed462e2d5d2cfb7f053d11536 --- /dev/null +++ b/packages/rocketchat-message-mark-as-unread/server/unreadMessages.js @@ -0,0 +1,30 @@ +import logger from './logger'; +Meteor.methods({ + unreadMessages(firstUnreadMessage) { + if (!Meteor.userId()) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { + method: 'unreadMessages' + }); + } + const originalMessage = RocketChat.models.Messages.findOneById(firstUnreadMessage._id, { + fields: { + u: 1, + rid: 1, + file: 1, + ts: 1 + } + }); + if (originalMessage == null || Meteor.userId() === originalMessage.u._id) { + throw new Meteor.Error('error-action-not-allowed', 'Not allowed', { + method: 'unreadMessages', + action: 'Unread_messages' + }); + } + const lastSeen = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(originalMessage.rid, Meteor.userId()).ls; + if (firstUnreadMessage.ts >= lastSeen) { + return logger.connection.debug('Provided message is already marked as unread'); + } + logger.connection.debug('Updating unread message of ' + originalMessage.ts + ' as the first unread'); + return RocketChat.models.Subscriptions.setAsUnreadByRoomIdAndUserId(originalMessage.rid, Meteor.userId(), originalMessage.ts); + } +});