mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-03 08:21:07 +00:00
some @WIP hacks on model subscriptions
This commit is contained in:
parent
fe544de798
commit
966d81b9b8
2 changed files with 46 additions and 34 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue