Mercurial > psgxs
diff psgxs.js @ 21:e55b31f12f8c
Better handling of modify subscriptions.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 20 Oct 2010 00:26:45 +0200 |
parents | 957550e2d5a1 |
children | 0f42c9c8085a |
line wrap: on
line diff
--- a/psgxs.js +++ b/psgxs.js @@ -884,20 +884,30 @@ function onIq(stanza) { return makeError(response, errors.forbidden.n); var e = false; + var tags2 = []; for (i in subscriptions.tags) { - var jid = subscriptions.tags[i].getAttribute('jid'); - var subscription = subscriptions.tags[i].getAttribute('subscription'); + var tag = subscriptions.tags[i]; + var jid = tag.getAttribute('jid'); + var sub = tag.getAttribute('subscription'); + + if (sub == 'none' || sub == 'pending' || sub == 'subscribed' || sub == 'unconfigured') { + var set = storage.subscribe(nodeID, jid, sub); - var set = storage.subscribe(nodeID, jid, subscription); - if (typeof set == 'number') + if (typeof set == 'number') { + e = true; + tags2.push(tag); + } else { + // SECTION 8.8.4 + sendNotifs(jid, 'subscription', nodeID, {jid: jid, subscription: sub}); + } + } else { e = true; - else { - // SECTION 8.8.4 - sendNotifs(jid, 'subscription', nodeID, {jid: jid, subscription: subscription}); - subscriptions.tags.splice(i, 1); + tags2.push(tag); } } + subscriptions.tags = tags2; + if (e) return makeError(response, errors.owner.manage_subscriptions.modify.multiple_simultaneous_modifications.n, pubsub);