Newer
Older
Gabriel Engel
committed
Meteor.methods
sendMessage: (message) ->
console.log '[methods] sendMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
Gabriel Engel
committed
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] sendMessage -> Invalid user")
if not Meteor.call 'canAccessRoom', message.rid, Meteor.userId()
return false
Gabriel Engel
committed
message.u = Meteor.users.findOne Meteor.userId(), fields: username: 1
message.ts = new Date()
message = RocketChat.callbacks.run 'beforeSaveMessage', message
###
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
message.mentions?.forEach (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
# not the msg owner
'u._id': mention._id
,
$set:
# alert de user
alert: true
# open the room for the user
open: true
# increment undear couter
$inc:
unread: 1
,
# make sure we alert all matching subscription
multi: true
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.
###
ChatMessage.upsert
rid: message.rid
t: 't'
Gabriel Engel
committed
$unset:
t: 1
expireAt: 1