diff src/memory/disco.py @ 1414:159d16336f87

core, bridge, jp: management of service discovery extensions (XEP-0128)
author Goffi <goffi@goffi.org>
date Fri, 17 Apr 2015 22:59:35 +0200
parents 3265a2639182
children a419da93afef
line wrap: on
line diff
--- a/src/memory/disco.py	Fri Apr 17 10:39:41 2015 +0200
+++ b/src/memory/disco.py	Fri Apr 17 22:59:35 2015 +0200
@@ -254,7 +254,24 @@
         @return: list of tu"""
         entity = jid.JID(entity_jid_s)
         disco_infos = yield self.getInfos(entity, profile_key)
-        defer.returnValue((disco_infos.features, [(cat, type_, name or '') for (cat, type_), name in disco_infos.identities.items()]))
+        extensions = {}
+        for form_type, form in disco_infos.extensions.items():
+            fields = []
+            for field in form.fieldList:
+                data = {'type': field.fieldType}
+                for attr in ('var', 'label', 'desc'):
+                    value = getattr(field, attr)
+                    if value is not None:
+                        data[attr] = value
+
+            values = [field.value] if field.value is not None else field.values
+            fields.append((data, values))
+
+            extensions[form_type or ""] = fields
+
+        defer.returnValue((disco_infos.features,
+            [(cat, type_, name or '') for (cat, type_), name in disco_infos.identities.items()],
+            extensions))
 
     @defer.inlineCallbacks
     def _discoItems(self, entity_jid_s, profile_key=C.PROF_KEY_NONE):