Fix room manager

pull/496/head
Rodrigo Nascimento 11 years ago
parent 4b39898e30
commit c4cd444855
  1. 100
      client/lib/RoomManager.coffee

@ -24,35 +24,59 @@ Meteor.startup ->
subscription = Meteor.subscribe('subscription')
return subscription
close = (rid) ->
if openedRooms[rid]
if openedRooms[rid].sub?
for sub in openedRooms[rid].sub
close = (typeName) ->
if openedRooms[typeName]
if openedRooms[typeName].sub?
for sub in openedRooms[typeName].sub
sub.stop()
msgStream.removeListener rid
deleteMsgStream.removeListener rid
if openedRooms[typeName].rid?
msgStream.removeListener openedRooms[typeName].rid
deleteMsgStream.removeListener openedRooms[typeName].rid
openedRooms[rid].ready = false
openedRooms[rid].active = false
delete openedRooms[rid].timeout
delete openedRooms[rid].dom
openedRooms[typeName].ready = false
openedRooms[typeName].active = false
delete openedRooms[typeName].timeout
delete openedRooms[typeName].dom
RoomHistoryManager.clear rid
ChatMessage.remove rid: rid
if openedRooms[typeName].rid?
RoomHistoryManager.clear openedRooms[typeName].rid
ChatMessage.remove rid: openedRooms[typeName].rid
computation = Tracker.autorun ->
for rid, record of openedRooms when record.active is true
record.sub = [
Meteor.subscribe 'room', rid
# Meteor.subscribe 'messages', rid
]
for typeName, record of openedRooms when record.active is true
do (typeName, record) ->
record.sub = [
Meteor.subscribe 'room', typeName
# Meteor.subscribe 'messages', typeName
]
record.ready = record.sub[0].ready()
# record.ready = record.sub[0].ready() and record.sub[1].ready()
if record.ready is true
type = typeName.substr(0, 1)
name = typeName.substr(1)
query =
t: type
if type in ['c', 'p']
query.name = name
else if type is 'd'
query.usernames = $all: [Meteor.user().username, name]
record.ready = record.sub[0].ready()
# record.ready = record.sub[0].ready() and record.sub[1].ready()
room = ChatRoom.findOne query, { reactive: false }
Dep.changed()
openedRooms[typeName].rid = room._id
msgStream.on openedRooms[typeName].rid, (msg) ->
ChatMessage.upsert { _id: msg._id }, msg
deleteMsgStream.on openedRooms[typeName].rid, (msg) ->
ChatMessage.remove _id: msg._id
Dep.changed()
setRoomExpireExcept = (except) ->
@ -60,40 +84,34 @@ Meteor.startup ->
clearTimeout openedRooms[except].timeout
delete openedRooms[except].timeout
for rid of openedRooms
if rid isnt except and not openedRooms[rid].timeout?
openedRooms[rid].timeout = setTimeout close, defaultTime, rid
for typeName of openedRooms
if typeName isnt except and not openedRooms[typeName].timeout?
openedRooms[typeName].timeout = setTimeout close, defaultTime, typeName
open = (rid) ->
open = (typeName) ->
if not openedRooms[rid]?
openedRooms[rid] =
if not openedRooms[typeName]?
openedRooms[typeName] =
active: false
ready: false
setRoomExpireExcept rid
setRoomExpireExcept typeName
if subscription.ready()
# if ChatSubscription.findOne { rid: rid }, { reactive: false }
if openedRooms[rid].active isnt true
openedRooms[rid].active = true
msgStream.on rid, (msg) ->
ChatMessage.upsert { _id: msg._id }, msg
deleteMsgStream.on rid, (msg) ->
ChatMessage.remove _id: msg._id
if openedRooms[typeName].active isnt true
openedRooms[typeName].active = true
computation?.invalidate()
return {
ready: ->
Dep.depend()
return openedRooms[rid].ready
return openedRooms[typeName].ready
}
getDomOfRoom = (id, rid) ->
room = openedRooms[id]
getDomOfRoom = (typeName, rid) ->
room = openedRooms[typeName]
if not room?
return
@ -104,8 +122,8 @@ Meteor.startup ->
return room.dom
existsDomOfRoom = (rid) ->
room = openedRooms[rid]
existsDomOfRoom = (typeName) ->
room = openedRooms[typeName]
return room?.dom?
updateUserStatus = (user, status, utcOffset) ->

Loading…
Cancel
Save