The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/server/methods/loadHistory.coffee

66 lines
2.0 KiB

hideMessagesOfType = []
RocketChat.settings.get /Message_HideType_.+/, (key, value) ->
type = key.replace('Message_HideType_', '')
switch (type)
when 'mute_unmute'
types = [ 'user-muted', 'user-unmuted' ]
else
types = [ type ]
types.forEach (type) ->
index = hideMessagesOfType.indexOf(type)
if value is true and index is -1
hideMessagesOfType.push(type)
else if index > -1
hideMessagesOfType.splice(index, 1)
Meteor.methods
loadHistory: (rid, end, limit=20, ls) ->
check rid, String
# check end, Match.Optional(Number)
# check limit, Number
# check ls, Match.Optional(Date)
if not Meteor.userId()
throw new Meteor.Error 'error-invalid-user', 'Invalid user', { method: 'loadHistory' }
fromId = Meteor.userId()
room = Meteor.call 'canAccessRoom', rid, fromId
unless room
return false
if room.t is 'c' and not RocketChat.authz.hasPermission(fromId, 'preview-c-room') and room.usernames.indexOf(room.username) is -1
return false
options =
sort:
ts: -1
limit: limit
if not RocketChat.settings.get 'Message_ShowEditedStatus'
options.fields = { 'editedAt': 0 }
if end?
records = RocketChat.models.Messages.findVisibleByRoomIdBeforeTimestampNotContainingTypes(rid, end, hideMessagesOfType, options).fetch()
else
records = RocketChat.models.Messages.findVisibleByRoomIdNotContainingTypes(rid, hideMessagesOfType, options).fetch()
messages = _.map records, (message) ->
message.starred = _.findWhere message.starred, { _id: fromId }
return message
unreadNotLoaded = 0
if ls?
firstMessage = messages[messages.length - 1]
if firstMessage?.ts > ls
delete options.limit
unreadMessages = RocketChat.models.Messages.findVisibleByRoomIdBetweenTimestampsNotContainingTypes(rid, ls, firstMessage.ts, hideMessagesOfType, { limit: 1, sort: { ts: 1 } })
firstUnread = unreadMessages.fetch()[0]
unreadNotLoaded = unreadMessages.count()
return {
messages: messages
firstUnread: firstUnread
unreadNotLoaded: unreadNotLoaded
}