Fix message deletion and fix render of previous message

pull/359/head
Rodrigo Nascimento 10 years ago
parent bd712172ef
commit afbb394221
  1. 16
      client/lib/RoomManager.coffee
  2. 9
      client/lib/chatMessages.coffee
  3. 9
      client/methods/deleteMessage.coffee
  4. 12
      client/methods/updateMessage.coffee
  5. 3
      client/views/app/room.coffee
  6. 12
      server/methods/deleteMessage.coffee
  7. 22
      server/methods/updateMessage.coffee
  8. 26
      server/stream/messages.coffee
  9. 13
      server/stream/streamBroadcast.coffee

@ -1,8 +1,17 @@
Meteor.startup ->
ChatMessage.find().observe
removed: (record) ->
recordBefore = ChatMessage.findOne {ts: {$lt: record.ts}}, {sort: {ts: -1}}
if recordBefore?
ChatMessage.update {_id: recordBefore._id}, {$set: {tick: new Date}}
@RoomManager = new class
defaultTime = 600000 # 10 minutes
openedRooms = {}
subscription = null
msgStream = new Meteor.Stream 'messages'
deleteMsgStream = new Meteor.Stream 'delete-message'
onlineUsers = new ReactiveVar {}
Dep = new Tracker.Dependency
@ -18,6 +27,7 @@
sub.stop()
msgStream.removeListener rid
deleteMsgStream.removeListener rid
openedRooms[rid].ready = false
openedRooms[rid].active = false
@ -63,11 +73,11 @@
openedRooms[rid].active = true
msgStream.on rid, (msg) ->
if msg._deleted?
return ChatMessage.remove _id: msg._id
ChatMessage.upsert { _id: msg._id }, msg
deleteMsgStream.on rid, (msg) ->
ChatMessage.remove _id: msg._id
computation.invalidate()
return {

@ -86,11 +86,10 @@
#Meteor.call 'onClientBeforeSendMessage', {}
Meteor.call 'sendMessage', msgObject
deleteMsg = (element) ->
id = element.getAttribute("id")
Meteor.call 'deleteMessage', { id: id }, (error, result) ->
if error
return Errors.throw error.reason
deleteMsg = (message) ->
Meteor.call 'deleteMessage', message, (error, result) ->
if error
return Errors.throw error.reason
update = (id, rid, input) ->
if _.trim(input.value) isnt ''

@ -0,0 +1,9 @@
Meteor.methods
deleteMessage: (message) ->
if not Meteor.userId()
throw new Meteor.Error 203, t('general.User_logged_out')
Tracker.nonreactive ->
ChatMessage.remove
_id: message._id
'u._id': Meteor.userId()

@ -14,14 +14,4 @@ Meteor.methods
,
$set:
ets: message.ets
msg: message.msg
deleteMessage: (message) ->
if not Meteor.userId()
throw new Meteor.Error 203, t('general.User_logged_out')
Tracker.nonreactive ->
ChatMessage.remove
_id: message.id
'u._id': Meteor.userId()
msg: message.msg

@ -431,6 +431,7 @@ Template.room.events
Session.set('showUserInfo', $(e.currentTarget).data('username'))
'click .delete-message': (event) ->
message = @_arguments[1]
msg = event.currentTarget.parentNode.parentNode
return if msg.classList.contains("system")
swal {
@ -445,7 +446,7 @@ Template.room.events
html: false
}, ->
swal t('Deleted'), t('Your_entry_has_been_deleted'), 'success'
ChatMessages.deleteMsg(msg)
ChatMessages.deleteMsg(message)
'click .start-video': (event) ->
_id = Template.instance().data._id

@ -0,0 +1,12 @@
Meteor.methods
deleteMessage: (message) ->
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] deleteMessage -> Invalid user")
console.log '[methods] deleteMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
ChatMessage.remove
_id: message._id
'u._id': Meteor.userId()
deleteMsgStream.emit message.rid, { _id: message._id }

@ -19,24 +19,4 @@ Meteor.methods
$set: message
# Meteor.defer ->
# RocketChat.callbacks.run 'afterSaveMessage', ChatMessage.findOne(message.id)
deleteMessage: (message) ->
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] deleteMessage -> Invalid user")
console.log '[methods] deleteMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
ChatMessage.update
_id: message.id
'u._id': Meteor.userId()
,
$set:
_deleted: true
# userId = Meteor.userId()
# Meteor.setTimeout ->
# ChatMessage.remove
# _id: message.id
# 'u._id': userId
# , 10000
# RocketChat.callbacks.run 'afterSaveMessage', ChatMessage.findOne(message.id)

@ -1,4 +1,5 @@
msgStream = new Meteor.Stream 'messages'
@msgStream = new Meteor.Stream 'messages'
@deleteMsgStream = new Meteor.Stream 'delete-message'
msgStream.permissions.write (eventName) ->
console.log('stream.permissions.write', this.userId);
@ -18,6 +19,18 @@ msgStream.permissions.read (eventName) ->
catch e
return false
deleteMsgStream.permissions.write (eventName) ->
return false
deleteMsgStream.permissions.read (eventName) ->
try
canAccess = Meteor.call 'canAccessRoom', eventName, this.userId
return !!canAccess
catch e
return false
Meteor.startup ->
filter =
$or: [
@ -27,8 +40,6 @@ Meteor.startup ->
ets:
$gt: new Date()
]
_deleted:
$ne: true
options = {}
@ -38,12 +49,3 @@ Meteor.startup ->
changed: (record) ->
msgStream.emit record.rid, record
ChatMessage.find({ _deleted: true }, { fields: { rid: 1, _id: 1 } }).observeChanges
added: (_id, record) ->
msgStream.emit record.rid, { _id: _id, _deleted: true }
changed: (_id, record) ->
msgStream.emit record.rid, { _id: _id, _deleted: true }
ChatMessage.remove
_id: message.id
'u._id': Meteor.userId()

@ -49,10 +49,11 @@
Meteor.startup ->
config =
'typing': typingStream
'deleteMsgStream': deleteMsgStream
if webrtc
startStreamBroadcast
'webrtc.stream': webrtc.stream
'typing': typingStream
else
startStreamBroadcast
'typing': typingStream
config['webrtc.stream'] = webrtc.stream
startStreamBroadcast config

Loading…
Cancel
Save