summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-08-01 13:03:18 +0200
committerFlorent Le Coz <louiz@louiz.org>2014-08-01 13:03:18 +0200
commit6250ba345e8077ee913bd1fa2a3d5e2c5ae0c416 (patch)
tree252ff564d9780b112a8d7b2c57189f3b2408d074
parent52f50cd949cbfb55d05f1eea1d0619bba573ec7c (diff)
downloadpoezio-6250ba345e8077ee913bd1fa2a3d5e2c5ae0c416.tar.gz
poezio-6250ba345e8077ee913bd1fa2a3d5e2c5ae0c416.tar.bz2
poezio-6250ba345e8077ee913bd1fa2a3d5e2c5ae0c416.tar.xz
poezio-6250ba345e8077ee913bd1fa2a3d5e2c5ae0c416.zip
Fix the data form retrieval, by making it non-blocking
-rw-r--r--src/fixes.py22
-rw-r--r--src/tabs/muctab.py12
2 files changed, 18 insertions, 16 deletions
diff --git a/src/fixes.py b/src/fixes.py
index 39610aa7..da00c48e 100644
--- a/src/fixes.py
+++ b/src/fixes.py
@@ -37,20 +37,20 @@ def get_version(xmpp, jid, callback=None, **kwargs):
return handle_result(result)
-def get_room_form(xmpp, room):
+def get_room_form(xmpp, room, callback):
+ def _cb(result):
+ if result["type"] == "error":
+ callback(None)
+ xform = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
+ if xform is None:
+ callback(None)
+ form = xmpp.plugin['xep_0004'].buildForm(xform)
+ callback(form)
+
iq = xmpp.make_iq_get(ito=room)
query = ET.Element('{http://jabber.org/protocol/muc#owner}query')
iq.append(query)
- try:
- result = iq.send()
- except:
- return False
- xform = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
- if xform is None:
- return False
- form = xmpp.plugin['xep_0004'].buildForm(xform)
- return form
-
+ iq.send(callback=_cb)
def _filter_add_receipt_request(self, stanza):
"""
diff --git a/src/tabs/muctab.py b/src/tabs/muctab.py
index 4dc7a2cf..5ebaf522 100644
--- a/src/tabs/muctab.py
+++ b/src/tabs/muctab.py
@@ -361,13 +361,15 @@ class MucTab(ChatTab):
"""
/configure
"""
- form = fixes.get_room_form(self.core.xmpp, self.name)
- if not form:
- self.core.information(
+ def on_form_received(form):
+ if not form:
+ self.core.information(
_('Could not retrieve the configuration form'),
_('Error'))
- return
- self.core.open_new_form(form, self.cancel_config, self.send_config)
+ return
+ self.core.open_new_form(form, self.cancel_config, self.send_config)
+
+ form = fixes.get_room_form(self.core.xmpp, self.name, on_form_received)
def cancel_config(self, form):
"""