some @WIP hacks on model subscriptions

This commit is contained in:
Tyler Renelle 2013-02-05 16:11:28 -05:00
parent fe544de798
commit 966d81b9b8
2 changed files with 46 additions and 34 deletions

View file

@ -36,13 +36,36 @@ get '/', (page, model, next) ->
#if req.headers['x-forwarded-proto']!='https' and process.env.NODE_ENV=='production'
# return page.redirect 'https://' + req.headers.host + req.url
party.server model, (queries) ->
# This used to be in party.server(model, cb), but was getting `TypeError: Object #<Model> has no method 'server'`
# on the second load for some reason
partyQueries = (cb) ->
selfQ = model.query('users').withId(model.session.userId)
model.fetch selfQ, (err, self) ->
console.error err if err
currentParty = self.at(0).get('party.current')
console.log {self: self.get()}
console.log {currentParty:currentParty}
if currentParty
partiesQ = model.query('parties').withId(currentParty)
model.fetch partiesQ, (err, parties) ->
console.error err if err
membersQ = model.query('users').party(parties.at(0).get('members'))
cb([partiesQ, membersQ, selfQ])
else
cb([selfQ])
partyQueries (queries) ->
subscribeCb = ->
[err, party, members, user] = [arguments[0], arguments[1].at(0), arguments[2], arguments[3].at(0)]
console.log {err:err, user:user.get(), party:party.get(), members:members.get()}
[err, user] = [arguments[0], null]
throw err if err
if arguments.length == 4
[party, members, user] = [arguments[1].at(0), arguments[2], arguments[3].at(0)]
console.log {err:err, user:user.get(), party:party.get(), members:members.get()}
model.ref '_party', party
model.ref '_partyMembers', members
else
user = arguments[1].at(0)
model.ref '_user', user
model.ref '_party', party
model.ref '_partyMembers', members
batch = new schema.BatchUpdate(model)
batch.startTransaction()
obj = batch.obj()

View file

@ -1,19 +1,5 @@
_ = require('underscore')
module.exports.server = (model, cb) ->
selfQ = model.query('users').withId(model.session.userId)
model.fetch selfQ, (err, self) ->
console.error err if err
currentParty = self.at(0).get('party.current')
if currentParty
partiesQ = model.query('parties').withId(currentParty)
model.fetch partiesQ, (err, parties) ->
console.error err if err
membersQ = model.query('users').party(parties.at(0).get('members'))
cb([partiesQ, membersQ, selfQ])
else
cb([selfQ])
schema = require './schema'
module.exports.app = (exports, model) ->
user = model.at('_user')
@ -30,6 +16,7 @@ module.exports.app = (exports, model) ->
obj = user.get()
query = model.query('users').party([id])
model.fetch query, (err, users) ->
throw err if err
partyMember = users.at(0).get()
if !partyMember?.id?
model.set "_view.partyError", "User with id #{id} not found."
@ -47,31 +34,33 @@ module.exports.app = (exports, model) ->
exports.partyAccept = ->
invitation = user.get('party.invitation')
user.set 'party.current', invitation
user.set 'party.invitation', null
model.push "parties.#{invitation}.members", user.get('id')
window.location.reload()
user.set 'party.invitation', null, ->
user.set 'party.current', invitation, ->
window.location.reload()
exports.partyReject = ->
user.set 'party.invitation', null
# TODO splice parties.*.invites[key]
# TODO notify sender
exports.partyLeave = ->
id = user.get('party.current')
user.set 'party.current', null
members = model.get ("parties.#{id}.members")
index = members.indexOf(user.get('id'))
newMembers = members.slice(index)
if (newMembers.length == 0)
# last member out, kill the party
model.del "parties.#{id}"
else
model.set "parties.#{id}.members", members.slice(index)
window.location.reload()
user.set 'party.current', null, ->
members = model.get "parties.#{id}.members"
index = members.indexOf(user.get('id'))
newMembers = members.slice(index)
model.set "parties.#{id}.members", newMembers ->
if (newMembers.length == 0)
# last member out, kill the party
model.del "parties.#{id}", -> window.location.reload()
else
window.location.reload()
exports.partyDisband = ->
# user.on 'set', 'parties.invitation', (after, before) ->
user.on 'set', 'party.invitation', (id) ->
model.fetch "parties.#{id}", (err, party) -> model.set '_party', party
#
# model.on '*', '_party.members', (ids) ->
# # TODO unsubscribe to previous subscription