2013-02-05 05:20:58 +00:00
|
|
|
_ = require('underscore')
|
2013-02-05 21:11:28 +00:00
|
|
|
schema = require './schema'
|
2013-02-05 06:37:13 +00:00
|
|
|
|
2013-02-06 05:15:00 +00:00
|
|
|
_subscriptions =
|
|
|
|
|
party:
|
|
|
|
|
query: null
|
|
|
|
|
id: null
|
|
|
|
|
members:
|
|
|
|
|
query: null
|
|
|
|
|
ids: null
|
2013-02-06 04:42:30 +00:00
|
|
|
|
2013-02-06 05:15:00 +00:00
|
|
|
module.exports.partySubscribe = partySubscribe = (model, id, cb) ->
|
2013-02-06 06:11:12 +00:00
|
|
|
s = _subscriptions
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
# Note, this tries to unsubscribe from previous similar subscriptions so we don't have a memory leak. However,
|
|
|
|
|
# This causes the page to crash on refresh. We need to fix this in the future. Same goes for membersSubscribe
|
|
|
|
|
if s.party.query? and id == s.party.id
|
|
|
|
|
# No need to resubscribe, same parameters
|
|
|
|
|
return cb(model.at('_party'))
|
|
|
|
|
|
|
|
|
|
# already have a subscription, but we want a new one
|
|
|
|
|
if s.party.query? and s.party.id != id
|
|
|
|
|
s.party.query.unsubscribe()
|
|
|
|
|
s.party.query = null
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
# subscripe
|
|
|
|
|
s.party.query = model.query('parties').withId(id)
|
|
|
|
|
s.party.id = id
|
|
|
|
|
s.party.query.subscribe (err, res) ->
|
|
|
|
|
throw err if err
|
|
|
|
|
p = res.at(0)
|
|
|
|
|
model.ref '_party', p
|
2013-02-06 06:59:02 +00:00
|
|
|
|
|
|
|
|
# FIXME this is the kicker right here. This isn't getting triggered, and it's the reason why we have to refresh
|
|
|
|
|
# after every event. Get this working
|
2013-02-06 06:11:12 +00:00
|
|
|
p.on '*', 'members', (ids) ->
|
2013-02-06 06:59:02 +00:00
|
|
|
console.log("members listener got called")
|
2013-02-06 06:11:12 +00:00
|
|
|
membersSubscribe model, ids
|
2013-02-06 06:59:02 +00:00
|
|
|
|
|
|
|
|
membersSubscribe model, p.get('members'), (m) ->
|
|
|
|
|
cb(p) if cb?
|
2013-02-06 06:11:12 +00:00
|
|
|
|
2013-02-06 04:42:30 +00:00
|
|
|
|
2013-02-06 05:15:00 +00:00
|
|
|
module.exports.membersSubscribe = membersSubscribe = (model, ids, cb) ->
|
2013-02-06 06:11:12 +00:00
|
|
|
s = _subscriptions
|
|
|
|
|
|
|
|
|
|
### @see above
|
|
|
|
|
if s.members.query? and !_.isEmpty(_.difference(s.members.ids, ids))
|
|
|
|
|
# No need to resubscribe, same parameters
|
|
|
|
|
return cb(model.at('_partyMembers'))
|
|
|
|
|
|
|
|
|
|
# already have a subscription, but we want a new one
|
|
|
|
|
if s.members.query? and _.isEmpty(_.difference(s.members.ids, ids))
|
|
|
|
|
s.members.query.unsubscribe()
|
|
|
|
|
s.members.query = null
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
# subscripe
|
|
|
|
|
s.members.query = model.query('users').party(ids)
|
|
|
|
|
s.members.ids = ids
|
|
|
|
|
s.members.query.subscribe (err, m) ->
|
|
|
|
|
throw err if err
|
|
|
|
|
model.ref '_partyMembers', m
|
|
|
|
|
cb(m) if cb?
|
2013-02-06 04:42:30 +00:00
|
|
|
|
2013-02-06 05:47:08 +00:00
|
|
|
module.exports.app = (appExports, model) ->
|
|
|
|
|
user = model.at('_user')
|
2013-02-06 01:21:05 +00:00
|
|
|
|
|
|
|
|
model.on 'set', '_user.party.invitation', (id) ->
|
2013-02-06 06:59:02 +00:00
|
|
|
partySubscribe(model, id) if id?
|
2013-02-06 01:21:05 +00:00
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
appExports.partyCreate = ->
|
2013-02-05 05:20:58 +00:00
|
|
|
newParty = model.get("_newParty")
|
2013-02-05 23:12:39 +00:00
|
|
|
id = model.add 'parties', { name: newParty, leader: user.get('id'), members: [user.get('id')], invites:[] }
|
2013-02-05 05:20:58 +00:00
|
|
|
user.set 'party', {current: id, invitation: null, leader: true}
|
2013-02-06 05:15:00 +00:00
|
|
|
partySubscribe model, id
|
2013-02-05 05:20:58 +00:00
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
appExports.partyInvite = ->
|
2013-02-05 05:20:58 +00:00
|
|
|
id = model.get('_newPartyMember').replace(/[\s"]/g, '')
|
|
|
|
|
return if _.isEmpty(id)
|
|
|
|
|
|
|
|
|
|
obj = user.get()
|
|
|
|
|
query = model.query('users').party([id])
|
2013-02-06 05:47:08 +00:00
|
|
|
model.fetch query, (err, res) ->
|
2013-02-05 21:11:28 +00:00
|
|
|
throw err if err
|
2013-02-06 05:47:08 +00:00
|
|
|
u = res.at(0).get()
|
|
|
|
|
if !u?.id?
|
2013-02-05 05:20:58 +00:00
|
|
|
model.set "_view.partyError", "User with id #{id} not found."
|
|
|
|
|
return
|
2013-02-06 05:47:08 +00:00
|
|
|
else if u.party.current? or u.party.invitation?
|
2013-02-05 05:20:58 +00:00
|
|
|
model.set "_view.partyError", "User already in a party or pending invitation."
|
|
|
|
|
return
|
|
|
|
|
else
|
2013-02-06 05:15:00 +00:00
|
|
|
p = model.at '_party'
|
|
|
|
|
p.push "invites", id
|
|
|
|
|
model.set "users.#{id}.party.invitation", p.get('id')
|
2013-02-05 05:20:58 +00:00
|
|
|
$.bootstrapGrowl "Invitation Sent."
|
|
|
|
|
$('#party-modal').modal('hide')
|
2013-02-05 23:12:39 +00:00
|
|
|
model.set '_newPartyMember', ''
|
2013-02-06 05:47:08 +00:00
|
|
|
membersSubscribe model, p.get('members'), ->
|
|
|
|
|
# TODO get subscriptions really working so we don't need to reload
|
|
|
|
|
window.location.reload()
|
2013-02-05 05:20:58 +00:00
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
appExports.partyAccept = ->
|
2013-02-05 05:20:58 +00:00
|
|
|
invitation = user.get('party.invitation')
|
2013-02-06 05:15:00 +00:00
|
|
|
partySubscribe model, invitation, (p) ->
|
|
|
|
|
p.push 'members', user.get('id')
|
2013-02-05 23:12:39 +00:00
|
|
|
user.set 'party.invitation', null
|
2013-02-06 05:15:00 +00:00
|
|
|
user.set 'party.current', p.get('id')
|
2013-02-06 05:47:08 +00:00
|
|
|
membersSubscribe model, p.get('members'), (m) ->
|
|
|
|
|
window.location.reload()
|
2013-02-05 05:20:58 +00:00
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
appExports.partyReject = ->
|
2013-02-05 05:20:58 +00:00
|
|
|
user.set 'party.invitation', null
|
2013-02-06 05:47:08 +00:00
|
|
|
model.set '_party', null
|
2013-02-05 23:12:39 +00:00
|
|
|
|
2013-02-05 21:11:28 +00:00
|
|
|
# TODO splice parties.*.invites[key]
|
2013-02-05 05:20:58 +00:00
|
|
|
# TODO notify sender
|
|
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
appExports.partyLeave = ->
|
2013-02-05 23:52:29 +00:00
|
|
|
id = user.set 'party.current', null
|
2013-02-06 05:15:00 +00:00
|
|
|
p = model.at '_party'
|
|
|
|
|
members = p.get('members')
|
2013-02-05 23:12:39 +00:00
|
|
|
index = members.indexOf(user.get('id'))
|
2013-02-06 03:27:19 +00:00
|
|
|
members.splice(index,1)
|
2013-02-06 05:15:00 +00:00
|
|
|
p.set 'members', members
|
2013-02-05 23:23:56 +00:00
|
|
|
if (members.length == 0)
|
2013-02-05 23:12:39 +00:00
|
|
|
# last member out, kill the party
|
2013-02-05 23:52:29 +00:00
|
|
|
model.del "parties.#{id}"
|
2013-02-06 05:47:08 +00:00
|
|
|
#_subscriptions.party.query.unsubscribe()
|
|
|
|
|
model.set '_party', null
|
|
|
|
|
model.set '_partyMembers', null
|
2013-02-06 06:59:02 +00:00
|
|
|
setTimeout window.location.reload, 1
|
2013-02-05 05:20:58 +00:00
|
|
|
|
2013-02-05 23:12:39 +00:00
|
|
|
#exports.partyDisband = ->
|