setup party model subscriptions (currently very inefficient, and

unsubscribe not being utilized)
This commit is contained in:
Tyler Renelle 2013-02-05 01:37:13 -05:00
parent a67c82aab5
commit 6245d0adce
4 changed files with 36 additions and 24 deletions

View file

@ -11,6 +11,7 @@ scoring = require './scoring'
schema = require './schema'
helpers = require './helpers'
browser = require './browser'
party = require './party'
helpers.viewHelpers view
_ = require('underscore')
@ -24,10 +25,6 @@ setupModelFns = (model) ->
# also update in scoring.coffee. TODO create a function accessible in both locations
(lvl*100)/5
# model.fn '_party', '_user.party', (ids) ->
# model.fetch model.query('users').party(ids), (err, party) ->
# model.set '_view.party', party
# ========== ROUTES ==========
get '/', (page, model, next) ->
@ -64,10 +61,7 @@ get '/', (page, model, next) ->
setupListReferences(model)
setupModelFns(model)
# Subscribe to friends
# if obj.party?.current?
# model.subscribe model.query('users').party(obj.party), (err, party) ->
# model.ref '_party', party
party.server(model)
page.render()
@ -96,7 +90,7 @@ ready (model) ->
browser.setupTour(model)
browser.setupGrowlNotifications(model) unless model.get('_view.mobileDevice')
require('./party')(exports, model)
party.app(exports, model)
require('../server/private').app(exports, model)

View file

@ -1,14 +1,23 @@
_ = require('underscore')
module.exports = (appExports, model) ->
module.exports.server = (model) ->
obj = model.get('_user')
if obj.party?.current
model.subscribe model.query('parties').withId(obj.party.current), (err, parties) ->
party = parties.at(0)
model.ref '_party', party
model.subscribe model.query('users').party(party.get('members')), (err, members) ->
model.ref '_partyMembers', members
module.exports.app = (exports, model) ->
user = model.at('_user')
appExports.partyCreate = ->
exports.partyCreate = ->
newParty = model.get("_newParty")
id = model.add 'parties', { name: newParty, leader: user.get('id'), members: [], invites: [] }
user.set 'party', {current: id, invitation: null, leader: true}
appExports.partyInvite = ->
exports.partyInvite = ->
id = model.get('_newPartyMember').replace(/[\s"]/g, '')
return if _.isEmpty(id)
@ -30,18 +39,18 @@ module.exports = (appExports, model) ->
#model.set '_newPartyMember', ''
#window.location.reload() #TODO break old subscription, setup new subscript, remove this reload
appExports.partyAccept = ->
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()
appExports.partyReject = ->
exports.partyReject = ->
user.set 'party.invitation', null
# TODO notify sender
appExports.partyLeave = ->
exports.partyLeave = ->
id = user.get('party.current')
user.set 'party.current', null
members = model.get ("parties.#{id}.members")
@ -49,7 +58,11 @@ module.exports = (appExports, model) ->
model.set "parties.#{id}.members", members.slice(index)
window.location.reload()
appExports.partyDisband = ->
exports.partyDisband = ->
user.on 'set', 'parties.invitation', (after, before) ->
# user.on 'set', 'parties.invitation', (after, before) ->
#
# model.on '*', '_party.members', (ids) ->
# # TODO unsubscribe to previous subscription
# model.subscribe model.query('users').party(ids), (err, members) ->
# model.ref '_view.partyMembers', members

View file

@ -79,6 +79,11 @@ module.exports.customAccessControl = (store) ->
store.queryAccess "users", "party", (ids, next) ->
next(true) # no harm in public user stats
store.query.expose "parties", "withId", (id) ->
@where("id").equals(id)
store.queryAccess "parties", "withId", (id, next) ->
next(true)
store.readPathAccess "parties.*", ->
arguments[arguments.length-1](true)

View file

@ -113,14 +113,14 @@
<app:myModal modalId="party-modal" header="Party">
<h2>
{#if _user.party.current}Invite Member To "{_user.party.current}"
{else if _user.party.invitation}You're Invited To A Party
{#if _user.party.current}Invite Member To "{_party.name}"
{else if _user.party.invitation}You're Invited To "{_party.name}"
{else}Create A Party{/}
</h2>
{#if _user.party.current}
<!-- In a party -->
{#each _party as :member}
{#each _partyMembers as :member}
{:member.id}
{/}
<form x-bind="submit: partyInvite">
@ -229,8 +229,8 @@
</td>
<!-- Party -->
{#if _user.flags.partyEnabled}
{#each _party as :member}
{#if _party}
{#each _partyMembers as :member}
<td class="avatar party-avatar" rel="tooltip" title="{username(:member.auth)}" data-placement="bottom" >
<div class='avatar-sprites'>
<img class='weapon weapon-{:member.items.weapon}' src="/img/BrowserQuest/habitrpg_mods/weapon{:member.items.weapon}.png" />
@ -319,7 +319,7 @@
<!--Title -->
<div class="row-fluid">
<div class="span6"><h2>Rewards</h2></div>
<div class="span6" id="money">{gold(_user.stats.money)} <img src='/img/coin_single_gold.png'/> {silver(_user.stats.money)} <img src='/img/coin_single_silver.png'/></div>
<div class="span6" id="money">{gold(_user.stats.gp)} <img src='/img/coin_single_gold.png'/> {silver(_user.stats.gp)} <img src='/img/coin_single_silver.png'/></div>
</div>
<!-- Content -->