closure queries fully setup, but they break on page refresh. just

regenerate each time for now
This commit is contained in:
Tyler Renelle 2013-02-06 00:15:00 -05:00
parent d8bc88dcb0
commit 6ce382af51
2 changed files with 47 additions and 44 deletions

View file

@ -65,13 +65,9 @@ get '/', (page, model, next) ->
setupModelFns(model)
if obj.party?.current?
party.partyQuery(model, obj.party.current, true).subscribe (err, res) ->
throw err if err
p = res.at(0)
model.ref '_party', p
party.membersQuery(model, p.get('members'), true).subscribe (err, res) ->
throw err if err
model.ref '_partyMembers', res
party.partySubscribe model, obj.party.current, (p) ->
console.log {current:obj.party.current, pMembers: p.get('members')}
party.membersSubscribe model, p.get('members'), (m) ->
# Here's a hack we need to get fixed (hopefully Lever will) - later model.queries override previous model.queries'
# returned fields. Aka, we need this here otherwise we only get the "public" fields for the current user, which

View file

@ -1,28 +1,45 @@
_ = require('underscore')
schema = require './schema'
_partyQ = null
_membersQ = null
_subscriptions =
party:
query: null
id: null
members:
query: null
ids: null
module.exports.partyQuery = partyQuery = (model, id, reset) ->
if !_partyQ? or reset
_partyQ = model.query('parties').withId(id)
_partyQ
module.exports.partySubscribe = partySubscribe = (model, id, cb) ->
# New subscription coming in, or reset subscription with new parameters
if true #!_subscriptions.party.query? or _subscriptions.party.id != id
_subscriptions.party.query = model.query('parties').withId(id)
_subscriptions.party.id = id
_subscriptions.party.query.subscribe (err, p) ->
throw err if err
model.ref '_party', p.at(0)
cb(p.at(0)) if cb?
else
cb(model.at('_party')) if cb?
module.exports.membersQuery = membersQuery = (model, ids, reset) ->
if !_membersQ? or reset
_membersQ = model.query('users').party(ids)
_membersQ
module.exports.membersSubscribe = membersSubscribe = (model, ids, cb) ->
# New subscription coming in, or reset subscription with new parameters
if true #!_subscriptions.members.query? or !_.isEmpty(_.difference(_subscriptions.members.ids, ids))
_subscriptions.members.query = model.query('users').party(ids)
_subscriptions.members.ids = ids
_subscriptions.members.query.subscribe (err, m) ->
throw err if err
model.ref '_partyMembers', m
cb(m) if cb?
else
cb(model.at('_partyMembers')) if cb?
setupListeners = (model) ->
model.on 'set', '_user.party.invitation', (id) ->
model.subscribe model.query('parties').withId(id), (err, party) -> model.set '_party', party
partySubscribe model, id
model.on '*', '_party.members', (ids) ->
# TODO unsubscribe to previous subscription
q = model.query('users').party(ids)
model.subscribe q, (err, members) -> model.ref '_partyMembers', members
membersSubscribe model, ids
module.exports.app = (appExports, model) ->
user = model.at('_user')
@ -32,10 +49,7 @@ module.exports.app = (appExports, model) ->
newParty = model.get("_newParty")
id = model.add 'parties', { name: newParty, leader: user.get('id'), members: [user.get('id')], invites:[] }
user.set 'party', {current: id, invitation: null, leader: true}
model.subscribe model.query('parties').withId(id), (err, party) ->
throw err if err
model.ref '_party', party.at(0)
setupListeners(model)
partySubscribe model, id
appExports.partyInvite = ->
id = model.get('_newPartyMember').replace(/[\s"]/g, '')
@ -53,29 +67,22 @@ module.exports.app = (appExports, model) ->
model.set "_view.partyError", "User already in a party or pending invitation."
return
else
party = model.at '_party'
party.push "invites", id
model.set "users.#{id}.party.invitation", party.get('id')
p = model.at '_party'
p.push "invites", id
model.set "users.#{id}.party.invitation", p.get('id')
$.bootstrapGrowl "Invitation Sent."
$('#party-modal').modal('hide')
model.subscribe model.query('users').party(party.get('members')), (err, members) ->
throw err if err
model.ref '_partyMembers', members
membersSubscribe model, p.get('members')
model.set '_newPartyMember', ''
#TODO break old subscription, setup new subscript, remove this reload
appExports.partyAccept = ->
invitation = user.get('party.invitation')
model.subscribe model.query("parties").withId(invitation), (err, parties) ->
throw err if err
party = parties.at(0)
party.push 'members', user.get('id')
partySubscribe model, invitation, (p) ->
p.push 'members', user.get('id')
user.set 'party.invitation', null
user.set 'party.current', party.get('id')
model.ref '_party', party
model.subscribe model.query('users').party(party.get('members')), (err, members) ->
throw err if err
model.ref '_partyMembers', members
user.set 'party.current', p.get('id')
membersSubscribe model, p.get('members'), (m)
appExports.partyReject = ->
user.set 'party.invitation', null
@ -85,15 +92,15 @@ module.exports.app = (appExports, model) ->
appExports.partyLeave = ->
id = user.set 'party.current', null
party = model.at '_party'
members = party.get('members')
p = model.at '_party'
members = p.get('members')
index = members.indexOf(user.get('id'))
members.splice(index,1)
party.set 'members', members
p.set 'members', members
if (members.length == 0)
# last member out, kill the party
model.del "parties.#{id}"
model.unsubscribe model.query('parties').withId(id)
_subscriptions.party.query.unsubscribe()
model.set('_party', null)
#exports.partyDisband = ->