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

Reply via email to