mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-03 08:21:07 +00:00
party subscriptions fixes
This commit is contained in:
parent
e5005400a3
commit
a8882620d5
2 changed files with 68 additions and 86 deletions
|
|
@ -63,10 +63,7 @@ get '/', (page, model, next) ->
|
|||
# also update in scoring.coffee. TODO create a function accessible in both locations
|
||||
(lvl*100)/5
|
||||
|
||||
if obj.party?.current
|
||||
party.partySubscribe model, obj.party.current, (p) -> page.render()
|
||||
else
|
||||
page.render()
|
||||
party.partySubscribe model, -> page.render()
|
||||
|
||||
# ========== CONTROLLER FUNCTIONS ==========
|
||||
|
||||
|
|
|
|||
|
|
@ -2,93 +2,79 @@ _ = require('underscore')
|
|||
schema = require './schema'
|
||||
browser = require './browser'
|
||||
|
||||
_subscriptions =
|
||||
party:
|
||||
query: null
|
||||
id: null
|
||||
members:
|
||||
query: null
|
||||
ids: null
|
||||
partyQ = null
|
||||
membersQ = null
|
||||
|
||||
module.exports.partySubscribe = partySubscribe = (model, id, cb) ->
|
||||
s = _subscriptions
|
||||
partyUnsubscribe = (model) ->
|
||||
if window?
|
||||
subs = model._subs()
|
||||
model.unsubscribe.apply(model, subs)
|
||||
|
||||
###
|
||||
# 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'))
|
||||
module.exports.partySubscribe = partySubscribe = (model, cb) ->
|
||||
|
||||
# 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
|
||||
###
|
||||
# unsubscribe from everything - we're starting over
|
||||
partyUnsubscribe model
|
||||
|
||||
# subscripe
|
||||
s.party.query = model.query('parties').withId(id)
|
||||
s.party.id = id
|
||||
s.party.query.subscribe (err, res) ->
|
||||
# Restart subscription to the main user
|
||||
selfQ = model.query('users').withId(model.get('_userId') or model.session.userId)
|
||||
selfQ.subscribe (err, res) ->
|
||||
throw err if err
|
||||
p = res.at(0)
|
||||
model.ref '_party', p
|
||||
u = res.at(0)
|
||||
uObj = u.get()
|
||||
|
||||
# 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
|
||||
# p.on '*', 'members', (ids) ->
|
||||
# console.log("members listener got called")
|
||||
# membersSubscribe model, ids
|
||||
ids = p.get('members')
|
||||
if !_.isEmpty(ids)
|
||||
membersSubscribe model, ids, (m) ->
|
||||
browser.resetDom(model) if window?
|
||||
cb(p) if cb?
|
||||
else
|
||||
browser.resetDom(model) if window?
|
||||
cb(p) if cb?
|
||||
# If user not in a party, just send over that subscription
|
||||
unless uObj.party?.current
|
||||
model.ref '_user', u
|
||||
return cb()
|
||||
|
||||
# User in a party
|
||||
partiesQ = model.query('parties').withId(uObj.party.current)
|
||||
partiesQ.subscribe (err, res) ->
|
||||
throw err if err
|
||||
p = res.at(0)
|
||||
model.ref '_party', p
|
||||
|
||||
# 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
|
||||
#p.on '*', 'members', (ids) ->
|
||||
# console.log("members listener got called")
|
||||
# debugger
|
||||
# membersSubscribe model, ids
|
||||
|
||||
finished = (cb) ->
|
||||
# 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
|
||||
# are defined in model.query('users')party()
|
||||
model.subscribe selfQ, (err, users) ->
|
||||
model.ref '_user', users.at(0)
|
||||
browser.resetDom(model) if window?
|
||||
cb() if cb?
|
||||
|
||||
|
||||
module.exports.membersSubscribe = membersSubscribe = (model, ids, cb) ->
|
||||
s = _subscriptions
|
||||
ids = p.get('members')
|
||||
# Party has no members, just subscribe to the party itself
|
||||
if _.isEmpty(ids)
|
||||
finished(cb)
|
||||
|
||||
### @see above
|
||||
if s.members.query? and !_.isEmpty(_.difference(s.members.ids, ids))
|
||||
# No need to resubscribe, same parameters
|
||||
return cb(model.at('_partyMembers'))
|
||||
# Party has members, subscribe to those users too
|
||||
else
|
||||
membersQ = model.query('users').party(ids)
|
||||
membersQ.subscribe (err, m) ->
|
||||
throw err if err
|
||||
model.ref '_partyMembers', m
|
||||
finished(cb)
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
# are defined in model.query('users')party()
|
||||
selfQ = model.query('users').withId(model.get('_userId') or model.session.userId)
|
||||
model.subscribe selfQ, (err, users) ->
|
||||
model.ref '_user', users.at(0)
|
||||
cb(m) if cb?
|
||||
|
||||
module.exports.app = (appExports, model) ->
|
||||
user = model.at('_user')
|
||||
|
||||
model.on 'set', '_user.party.invitation', (id) ->
|
||||
partySubscribe(model, id) if id?
|
||||
model.on 'set', '_user.party.invitation', -> partySubscribe(model)
|
||||
|
||||
appExports.partyCreate = ->
|
||||
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}
|
||||
partySubscribe model, id, -> $('#party-modal').modal('show')
|
||||
partySubscribe model, -> $('#party-modal').modal('show')
|
||||
|
||||
appExports.partyInvite = ->
|
||||
id = model.get('_newPartyMember').replace(/[\s"]/g, '')
|
||||
|
|
@ -112,21 +98,17 @@ module.exports.app = (appExports, model) ->
|
|||
$.bootstrapGrowl "Invitation Sent."
|
||||
$('#party-modal').modal('hide')
|
||||
model.set '_newPartyMember', ''
|
||||
membersSubscribe model, p.get('members'), ->
|
||||
#window.location.reload(true)
|
||||
partySubscribe model
|
||||
|
||||
appExports.partyAccept = ->
|
||||
invitation = user.get('party.invitation')
|
||||
partySubscribe model, invitation, (p) ->
|
||||
user.set 'party.current', user.get('party.invitation')
|
||||
user.set 'party.invitation', null
|
||||
partySubscribe model, ->
|
||||
p = model.at('_party')
|
||||
p.push 'members', user.get('id')
|
||||
user.set 'party.invitation', null
|
||||
user.set 'party.current', p.get('id')
|
||||
membersSubscribe model, p.get('members'), (m) ->
|
||||
window.location.reload(true)
|
||||
|
||||
appExports.partyReject = ->
|
||||
user.set 'party.invitation', null
|
||||
model.set '_party', null
|
||||
browser.resetDom(model)
|
||||
# TODO splice parties.*.invites[key]
|
||||
# TODO notify sender
|
||||
|
|
@ -141,10 +123,13 @@ module.exports.app = (appExports, model) ->
|
|||
if (members.length == 0)
|
||||
# last member out, kill the party
|
||||
model.del "parties.#{id}"
|
||||
#_subscriptions.party.query.unsubscribe()
|
||||
#model.set '_party', null
|
||||
#model.set '_partyMembers', null
|
||||
#browser.resetDom()
|
||||
setTimeout (-> window.location.reload true), 1
|
||||
model.set '_party', null
|
||||
model.set '_partyMembers', null
|
||||
partyUnsubscribe model
|
||||
selfQ = model.query('users').withId(model.get('_userId') or model.session.userId)
|
||||
selfQ.subscribe (err, u) ->
|
||||
model.ref '_user', u.at(0)
|
||||
browser.resetDom model
|
||||
#setTimeout (-> window.location.reload true), 1
|
||||
|
||||
#exports.partyDisband = ->
|
||||
|
|
|
|||
Loading…
Reference in a new issue