changeset 453cd33cf535 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=453cd33cf535
description: use NEC to handle search form request / result
diffstat:
src/common/connection.py | 23 ++-------------
src/common/connection_handlers.py | 20 +++----------
src/common/connection_handlers_events.py | 45 +++++++++++++++++++++++++++++++
src/gui_interface.py | 16 -----------
src/search_window.py | 46 +++++++++++++++++++------------
5 files changed, 82 insertions(+), 68 deletions(-)
diffs (298 lines):
diff -r 090d64323f65 -r 453cd33cf535 src/common/connection.py
--- a/src/common/connection.py Sun Aug 29 20:22:20 2010 +0200
+++ b/src/common/connection.py Mon Aug 30 21:42:36 2010 +0200
@@ -2308,31 +2308,16 @@
def send_search_form(self, jid, form, is_form):
iq = common.xmpp.Iq(typ = 'set', to = jid, queryNS = \
- common.xmpp.NS_SEARCH)
+ common.xmpp.NS_SEARCH)
item = iq.getTag('query')
if is_form:
- item.addChild(node = form)
+ item.addChild(node=form)
else:
for i in form.keys():
item.setTagData(i, form[i])
def _on_response(resp):
- jid = jid = helpers.get_jid_from_iq(resp)
- tag = resp.getTag('query', namespace = common.xmpp.NS_SEARCH)
- if not tag:
- self.dispatch('SEARCH_RESULT', (jid, None, False))
- return
- df = tag.getTag('x', namespace = common.xmpp.NS_DATA)
- if df:
- self.dispatch('SEARCH_RESULT', (jid, df, True))
- return
- df = []
- for item in tag.getTags('item'):
- # We also show attributes. jid is there
- f = item.attrs
- for i in item.getPayload():
- f[i.getName()] = i.getData()
- df.append(f)
- self.dispatch('SEARCH_RESULT', (jid, df, False))
+ gajim.nec.push_incoming_event(SearchResultReceivedEvent(None,
+ conn=self, iq_obj=resp))
self.connection.SendAndCallForResponse(iq, _on_response)
diff -r 090d64323f65 -r 453cd33cf535 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Sun Aug 29 20:22:20 2010 +0200
+++ b/src/common/connection_handlers.py Mon Aug 30 21:42:36 2010 +0200
@@ -2244,20 +2244,10 @@
self.connection.send(iq)
- def _search_fields_received(self, con, iq_obj):
- jid = jid = helpers.get_jid_from_iq(iq_obj)
- tag = iq_obj.getTag('query', namespace = common.xmpp.NS_SEARCH)
- if not tag:
- self.dispatch('SEARCH_FORM', (jid, None, False))
- return
- df = tag.getTag('x', namespace = common.xmpp.NS_DATA)
- if df:
- self.dispatch('SEARCH_FORM', (jid, df, True))
- return
- df = {}
- for i in iq_obj.getQueryPayload():
- df[i.getName()] = i.getData()
- self.dispatch('SEARCH_FORM', (jid, df, False))
+ def _SearchCB(self, con, iq_obj):
+ log.debug('SearchCB')
+ gajim.nec.push_incoming_event(SearchFormReceivedEvent(None,
+ conn=self, iq_obj=iq_obj))
def _StreamCB(self, con, obj):
if obj.getTag('conflict'):
@@ -2343,7 +2333,7 @@
common.xmpp.NS_DISCO_ITEMS)
con.RegisterHandler('iq', self._IqPingCB, 'get',
common.xmpp.NS_PING)
- con.RegisterHandler('iq', self._search_fields_received, 'result',
+ con.RegisterHandler('iq', self._SearchCB, 'result',
common.xmpp.NS_SEARCH)
con.RegisterHandler('iq', self._PrivacySetCB, 'set',
common.xmpp.NS_PRIVACY)
diff -r 090d64323f65 -r 453cd33cf535 src/common/connection_handlers_events.py
--- a/src/common/connection_handlers_events.py Sun Aug 29 20:22:20 2010 +0200
+++ b/src/common/connection_handlers_events.py Mon Aug 30 21:42:36 2010 +0200
@@ -500,4 +500,49 @@
if ns != 'storage:bookmarks':
return
self.parse_bookmarks()
+ return True
+
+class SearchFormReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
+ name = 'search-form-received'
+ base_network_events = []
+
+ def generate(self):
+ self.get_jid_resource()
+ self.data = None
+ self.is_dataform = False
+ tag = self.iq_obj.getTag('query', namespace=xmpp.NS_SEARCH)
+ if not tag:
+ return True
+ self.data = tag.getTag('x', namespace=xmpp.NS_DATA)
+ if self.data:
+ self.is_dataform = True
+ return True
+ self.data = {}
+ for i in self.iq_obj.getQueryPayload():
+ self.data[i.getName()] = i.getData()
+ return True
+
+
+class SearchResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
+ name = 'search-result-received'
+ base_network_events = []
+
+ def generate(self):
+ self.get_jid_resource()
+ self.data = None
+ self.is_dataform = False
+ tag = self.iq_obj.getTag('query', namespace=xmpp.NS_SEARCH)
+ if not tag:
+ return True
+ self.data = tag.getTag('x', namespace=xmpp.NS_DATA)
+ if self.data:
+ self.is_dataform = True
+ return True
+ self.data = []
+ for item in tag.getTags('item'):
+ # We also show attributes. jid is there
+ f = item.attrs
+ for i in item.getPayload():
+ f[i.getName()] = i.getData()
+ self.data.append(f)
return True
\ No newline at end of file
diff -r 090d64323f65 -r 453cd33cf535 src/gui_interface.py
--- a/src/gui_interface.py Sun Aug 29 20:22:20 2010 +0200
+++ b/src/gui_interface.py Mon Aug 30 21:42:36 2010 +0200
@@ -1704,20 +1704,6 @@
if ctrl:
ctrl.print_conversation(_('Error.'), 'status')
- def handle_event_search_form(self, account, data):
- # ('SEARCH_FORM', account, (jid, dataform, is_dataform))
- if data[0] not in self.instances[account]['search']:
- return
- self.instances[account]['search'][data[0]].on_form_arrived(data[1],
- data[2])
-
- def handle_event_search_result(self, account, data):
- # ('SEARCH_RESULT', account, (jid, dataform, is_dataform))
- if data[0] not in self.instances[account]['search']:
- return
- self.instances[account]['search'][data[0]].on_result_arrived(data[1],
- data[2])
-
def handle_event_resource_conflict(self, account, data):
# ('RESOURCE_CONFLICT', account, ())
# First we go offline, but we don't overwrite status message
@@ -2132,8 +2118,6 @@
'PING_SENT': [self.handle_event_ping_sent],
'PING_REPLY': [self.handle_event_ping_reply],
'PING_ERROR': [self.handle_event_ping_error],
- 'SEARCH_FORM': [self.handle_event_search_form],
- 'SEARCH_RESULT': [self.handle_event_search_result],
'RESOURCE_CONFLICT': [self.handle_event_resource_conflict],
'PEP_CONFIG': [self.handle_event_pep_config],
'UNIQUE_ROOM_ID_UNSUPPORTED': \
diff -r 090d64323f65 -r 453cd33cf535 src/search_window.py
--- a/src/search_window.py Sun Aug 29 20:22:20 2010 +0200
+++ b/src/search_window.py Mon Aug 30 21:42:36 2010 +0200
@@ -22,7 +22,9 @@
import gobject
import gtk
-from common import gajim, dataforms
+from common import gajim
+from common import dataforms
+from common import ged
import gtkgui_helpers
import dialogs
@@ -57,6 +59,11 @@
# Is there a jid column in results ? if -1: no, else column number
self.jid_column = -1
+ gajim.ged.register_event_handler('search-form-received', ged.GUI1,
+ self._nec_search_form_received)
+ gajim.ged.register_event_handler('search-result-received', ged.GUI1,
+ self._nec_search_result_received)
+
def request_form(self):
gajim.connections[self.account].request_search_fields(self.jid)
@@ -72,6 +79,10 @@
if self.pulse_id:
gobject.source_remove(self.pulse_id)
del gajim.interface.instances[self.account]['search'][self.jid]
+ gajim.ged.remove_event_handler('search-form-received', ged.GUI1,
+ self._nec_search_form_received)
+ gajim.ged.remove_event_handler('search-result-received', ged.GUI1,
+ self._nec_search_result_received)
def on_close_button_clicked(self, button):
self.window.destroy()
@@ -115,16 +126,16 @@
gajim.interface.instances[self.account]['infos'][jid] = \
vcard.VcardWindow(contact, self.account)
- def on_form_arrived(self, form, is_form):
+ def _nec_search_form_received(self, obj):
if self.pulse_id:
gobject.source_remove(self.pulse_id)
self.progressbar.hide()
self.label.hide()
- if is_form:
+ if obj.is_dataform:
self.is_form = True
self.data_form_widget = dataforms_widget.DataFormWidget()
- self.dataform = dataforms.ExtendForm(node = form)
+ self.dataform = dataforms.ExtendForm(node=obj.data)
self.data_form_widget.set_sensitive(True)
try:
self.data_form_widget.data_form = self.dataform
@@ -137,7 +148,7 @@
self.data_form_widget.title)
else:
self.is_form = False
- self.data_form_widget = config.FakeDataForm(form)
+ self.data_form_widget = config.FakeDataForm(obj.data)
self.data_form_widget.show_all()
self.search_vbox.pack_start(self.data_form_widget)
@@ -155,14 +166,14 @@
self.add_contact_button.set_sensitive(False)
self.information_button.set_sensitive(False)
- def on_result_arrived(self, form, is_form):
+ def _nec_search_result_received(self, obj):
if self.pulse_id:
gobject.source_remove(self.pulse_id)
self.progressbar.hide()
self.label.hide()
- if not is_form:
- if not form:
+ if not obj.is_dataform:
+ if not obj.data:
self.label.set_text(_('No result'))
self.label.show()
return
@@ -171,20 +182,19 @@
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.result_treeview = gtk.TreeView()
self.result_treeview.connect('cursor-changed',
- self.on_result_treeview_cursor_changed)
+ self.on_result_treeview_cursor_changed)
sw.add(self.result_treeview)
# Create model
- fieldtypes = [str]*len(form[0])
+ fieldtypes = [str]*len(obj.data[0])
model = gtk.ListStore(*fieldtypes)
# Copy data to model
- for item in form:
+ for item in obj.data:
model.append(item.values())
# Create columns
counter = 0
- for field in form[0].keys():
- self.result_treeview.append_column(
- gtk.TreeViewColumn(field, gtk.CellRendererText(),
- text = counter))
+ for field in obj.data[0].keys():
+ self.result_treeview.append_column(gtk.TreeViewColumn(field,
+ gtk.CellRendererText(), text=counter))
if field == 'jid':
self.jid_column = counter
counter += 1
@@ -196,7 +206,7 @@
self.information_button.show()
return
- self.dataform = dataforms.ExtendForm(node = form)
+ self.dataform = dataforms.ExtendForm(node=obj.data)
if len(self.dataform.items) == 0:
# No result
self.label.set_text(_('No result'))
@@ -215,7 +225,7 @@
selection = self.result_treeview.get_selection()
selection.set_mode(gtk.SELECTION_SINGLE)
self.result_treeview.connect('cursor-changed',
- self.on_result_treeview_cursor_changed)
+ self.on_result_treeview_cursor_changed)
counter = 0
for field in self.dataform.items[0].fields:
@@ -230,4 +240,4 @@
self.information_button.show()
if self.data_form_widget.title:
self.window.set_title('%s - Search - Gajim' % \
- self.data_form_widget.title)
+ self.data_form_widget.title)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits