Newer
Older
Gabriel Engel
committed
Meteor.methods
Gabriel Engel
committed
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] sendMessage -> Invalid user")
room = Meteor.call 'canAccessRoom', message.rid, Meteor.userId()
if not room
Gabriel Engel
committed
console.log '[methods] sendMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
message.u = Meteor.users.findOne Meteor.userId(), fields: username: 1
# message.urls = message.msg.match /([A-Za-z]{3,9}):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+~%/\.\w]+)?\??([-\+=&;%@\.\w]+)?#?([\w]+)?)?/g
message.html = message.msg
if _.trim(message.html) isnt ''
message.html = _.escapeHTML message.html
message = RocketChat.callbacks.run 'beforeSaveMessage', message
message.html = message.html.replace /\n/gm, '<br/>'
###
Defer other updated as their return is not interesting to the user
###
Meteor.defer ->
###
Update all the room activity tracker fields
###
ChatRoom.update
# only subscriptions to the same room
rid: message.rid
,
# update the last message timestamp
$set:
# increate the messages counter
$inc:
msgs: 1
# increment unread couter if direct messages
if room.t is 'd'
###
ChatSubscription.update
# only subscriptions to the same room
rid: message.rid
# not the msg owner
,
$set:
# alert de user
alert: true
# open the room for the user
open: true
else
message.mentions?.forEach (mention) ->
console.log mention
###
Update all other subscriptions of mentioned users to alert their owners and incrementing
the unread counter for mentions and direct messages
###
ChatSubscription.update
# only subscriptions to the same room
rid: message.rid
# the mentioned user
'u._id': mention._id
,
$set:
# alert de user
alert: true
# open the room for the user
open: true
# increment unread couter
$inc:
unread: 1
Update all other subscriptions to alert their owners but witout incrementing
the unread counter, as it is only for mentions and direct messages
###
ChatSubscription.update
# only subscriptions to the same room
rid: message.rid
# only the ones that have not been alerted yet
alert: false
# not the msg owner
'u._id':
,
$set:
# alert de user
alert: true
# open the room for the user
open: true
,
# make sure we alert all matching subscription
multi: true
###
Save the message. If there was already a typing record, update it.
###
rid: message.rid
t: 't'
$and: [{ 'u._id': message.u._id }]
Gabriel Engel
committed
$unset:
t: 1
expireAt: 1
Meteor.defer ->
message._id = Random.id()
RocketChat.callbacks.run 'afterSaveMessage', message