From c4cd4448558287cce76d23cda8fd77f13ebbf0ec Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 18 Aug 2015 15:48:46 -0300 Subject: [PATCH] Fix room manager --- client/lib/RoomManager.coffee | 100 ++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 41 deletions(-) diff --git a/client/lib/RoomManager.coffee b/client/lib/RoomManager.coffee index 46ce69eb13b..359d910ab0c 100644 --- a/client/lib/RoomManager.coffee +++ b/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) ->