Close rooms when more than 10 is open instead of closing rooms inactive after 10min

pull/1537/head
Rodrigo Nascimento 11 years ago
parent 7c73cc4cdf
commit 00a09c0bac
  1. 33
      packages/rocketchat-ui/lib/RoomManager.coffee

@ -44,7 +44,6 @@ RocketChat.Notifications.onUser 'message', (msg) ->
@RoomManager = new class
defaultTime = 600000 # 10 minutes
openedRooms = {}
subscription = null
msgStream = new Meteor.Stream 'messages'
@ -68,14 +67,16 @@ RocketChat.Notifications.onUser 'message', (msg) ->
openedRooms[typeName].ready = false
openedRooms[typeName].active = false
delete openedRooms[typeName].timeout
Blaze.remove openedRooms[typeName].template
delete openedRooms[typeName].dom
delete openedRooms[typeName].template
if openedRooms[typeName].rid?
RoomHistoryManager.clear openedRooms[typeName].rid
ChatMessage.remove rid: openedRooms[typeName].rid
rid = openedRooms[typeName].rid
delete openedRooms[typeName]
if rid?
RoomHistoryManager.clear rid
computation = Tracker.autorun ->
for typeName, record of openedRooms when record.active is true
@ -119,25 +120,29 @@ RocketChat.Notifications.onUser 'message', (msg) ->
Dep.changed()
setRoomExpireExcept = (except) ->
if openedRooms[except]?.timeout?
clearTimeout openedRooms[except].timeout
delete openedRooms[except].timeout
closeOlderRooms = ->
maxRoomsOpen = 10
if Object.keys(openedRooms).length <= maxRoomsOpen
return
for typeName of openedRooms
if typeName isnt except and not openedRooms[typeName].timeout?
openedRooms[typeName].timeout = setTimeout close, defaultTime, typeName
roomsToClose = _.sortBy(_.values(openedRooms), 'lastSeen').reverse().slice(maxRoomsOpen)
for roomToClose in roomsToClose
close roomToClose.typeName
open = (typeName) ->
open = (typeName) ->
if not openedRooms[typeName]?
openedRooms[typeName] =
typeName: typeName
active: false
ready: false
unreadSince: new ReactiveVar undefined
setRoomExpireExcept typeName
openedRooms[typeName].lastSeen = new Date
if openedRooms[typeName].ready
closeOlderRooms()
if subscription.ready()

Loading…
Cancel
Save