plugin events: added eventInviteesList method to get all R.S.V.P. at once.
This commit is contained in:
parent
394f7b85c2
commit
8b21f69945
1 changed files with 40 additions and 0 deletions
|
|
@ -74,6 +74,10 @@ class Events(object):
|
|||
in_sign='ssa{ss}s', out_sign='',
|
||||
method=self._eventInviteeSet,
|
||||
async=True)
|
||||
host.bridge.addMethod("eventInviteesList", ".plugin",
|
||||
in_sign='sss', out_sign='a{sa{ss}}',
|
||||
method=self._eventInviteesList,
|
||||
async=True),
|
||||
host.bridge.addMethod("eventInvite", ".plugin", in_sign='ssssassssssss', out_sign='',
|
||||
method=self._invite,
|
||||
async=True)
|
||||
|
|
@ -320,6 +324,42 @@ class Events(object):
|
|||
item_elt = pubsub.Item(id=client.jid.userhost(), payload=event_elt)
|
||||
return self._p.publish(client, service, node, items=[item_elt])
|
||||
|
||||
def _eventInviteesList(self, service, node, profile_key):
|
||||
service = jid.JID(service) if service else None
|
||||
node = node if node else NS_EVENT
|
||||
client = self.host.getClient(profile_key)
|
||||
return self.eventInviteesList(client, service, node)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def eventInviteesList(self, client, service, node):
|
||||
"""Retrieve attendance from event node
|
||||
|
||||
@param service(unicode, None): PubSub service
|
||||
@param node(unicode): PubSub node of the event
|
||||
@return (dict): a dict with current attendance status,
|
||||
an empty dict is returned if nothing has been answered yed
|
||||
"""
|
||||
items, metadata = yield self._p.getItems(service, node, profile_key=client.profile)
|
||||
invitees = {}
|
||||
for item in items:
|
||||
try:
|
||||
event_elt = next(item.elements(NS_EVENT, u'invitee'))
|
||||
except IndexError:
|
||||
# no item found, event data are not set yet
|
||||
log.warning(_(u"no data found for {item_id} (service: {service}, node: {node})".format(
|
||||
item_id=item['id'],
|
||||
service=service,
|
||||
node=node
|
||||
)))
|
||||
data = {}
|
||||
for key in (u'attend', u'guests'):
|
||||
try:
|
||||
data[key] = event_elt[key]
|
||||
except KeyError:
|
||||
continue
|
||||
invitees[item['id']] = data
|
||||
defer.returnValue(invitees)
|
||||
|
||||
def _invite(self, service, node, id_=NS_EVENT, email=u'', emails_extra=None, name=u'', host_name=u'', language=u'', url_template=u'',
|
||||
message_subject=u'', message_body=u'', profile_key=C.PROF_KEY_NONE):
|
||||
client = self.host.getClient(profile_key)
|
||||
|
|
|
|||
Loading…
Reference in a new issue