changeset 75e646695339 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=75e646695339
description: use NEC to handle archiving stanza.

diffstat:

 src/common/connection_handlers.py        |   3 +
 src/common/connection_handlers_events.py |  75 ++++++++++++++++++++++++++++
 src/common/message_archiving.py          |  83 +++++++------------------------
 src/dialogs.py                           |  49 +++++++++++------
 src/gui_interface.py                     |  14 -----
 5 files changed, 129 insertions(+), 95 deletions(-)

diffs (truncated from 334 to 300 lines):

diff -r b372293ffb6a -r 75e646695339 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Fri Nov 05 11:09:33 2010 +0100
+++ b/src/common/connection_handlers.py Fri Nov 05 20:36:45 2010 +0100
@@ -1102,6 +1102,9 @@
         gajim.nec.register_incoming_event(StreamConflictReceivedEvent)
         gajim.nec.register_incoming_event(PresenceReceivedEvent)
         gajim.nec.register_incoming_event(MessageReceivedEvent)
+        gajim.nec.register_incoming_event(ArchivingErrorReceivedEvent)
+        gajim.nec.register_incoming_event(
+            ArchivingPreferencesChangedReceivedEvent)
 
         gajim.ged.register_event_handler('http-auth-received', ged.CORE,
             self._nec_http_auth_received)
diff -r b372293ffb6a -r 75e646695339 src/common/connection_handlers_events.py
--- a/src/common/connection_handlers_events.py  Fri Nov 05 11:09:33 2010 +0100
+++ b/src/common/connection_handlers_events.py  Fri Nov 05 20:36:45 2010 +0100
@@ -1152,4 +1152,79 @@
         self.fjid = self.jingle_session.peerjid
         self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
         self.sid = self.jingle_session.sid
+        return True
+
+class ArchivingReceivedEvent(nec.NetworkIncomingEvent):
+    name = 'archiving-received'
+    base_network_events = []
+
+    def generate(self):
+        self.type_ = self.stanza.getType()
+        if self.type_ not in ('result', 'set', 'error'):
+            return
+        return True
+
+class ArchivingErrorReceivedEvent(nec.NetworkIncomingEvent):
+    name = 'archiving-error-received'
+    base_network_events = ['archiving-received']
+
+    def generate(self):
+        self.conn = self.base_event.conn
+        self.stanza = self.base_event.stanza
+        self.type_ = self.base_event.conn
+
+        if self.type_ == 'error':
+            self.error_msg = self.stanza.getErrorMsg()
+            return True
+
+class ArchivingPreferencesChangedReceivedEvent(nec.NetworkIncomingEvent):
+    name = 'archiving-preferences-changed-received'
+    base_network_events = ['archiving-received']
+
+    def generate(self):
+        self.conn = self.base_event.conn
+        self.stanza = self.base_event.stanza
+        self.type_ = self.base_event.type_
+
+        if self.type_ not in ('result', 'set'):
+            return
+
+        self.conf = {}
+        self.new_items = {}
+        self.removed_items = []
+        if self.stanza.getTag('pref'):
+            pref = self.stanza.getTag('pref')
+
+            if pref.getTag('auto'):
+                self.conf['auto'] = pref.getTagAttr('auto', 'save')
+
+            method_auto = pref.getTag('method', attrs={'type': 'auto'})
+            if method_auto:
+                self.conf['method_auto'] = method_auto.getAttr('use')
+
+            method_local = pref.getTag('method', attrs={'type': 'local'})
+            if method_local:
+                self.conf['method_local'] = method_local.getAttr('use')
+
+            method_manual = pref.getTag('method', attrs={'type': 'manual'})
+            if method_manual:
+                self.conf['method_manual'] = method_manual.getAttr('use')
+
+            default = pref.getTag('default')
+            if default:
+                self.conf['default'] = {
+                    'expire': default.getAttr('expire'),
+                    'otr': default.getAttr('otr'),
+                    'save': default.getAttr('save'),
+                    'unset': default.getAttr('unset')}
+
+            for item in pref.getTags('item'):
+                self.new_items[item.getAttr('jid')] = {
+                    'expire': item.getAttr('expire'),
+                    'otr': item.getAttr('otr'),
+                    'save': item.getAttr('save')}
+
+        elif self.stanza.getTag('itemremove'):
+            for item in pref.getTags('item'):
+                self.removed_items.append(item.getAttr('jid'))
         return True
\ No newline at end of file
diff -r b372293ffb6a -r 75e646695339 src/common/message_archiving.py
--- a/src/common/message_archiving.py   Fri Nov 05 11:09:33 2010 +0100
+++ b/src/common/message_archiving.py   Fri Nov 05 20:36:45 2010 +0100
@@ -19,6 +19,9 @@
 ##
 
 import common.xmpp
+from common import gajim
+from common import ged
+from common.connection_handlers_events import ArchivingReceivedEvent
 
 import logging
 log = logging.getLogger('gajim.c.message_archiving')
@@ -39,6 +42,9 @@
         self.method_manual = None
         self.default = None
         self.items = {}
+        gajim.ged.register_event_handler(
+            'archiving-preferences-changed-received', ged.CORE,
+            self._nec_archiving_changed_received)
 
     def request_message_archiving_preferences(self):
         iq_ = common.xmpp.Iq('get')
@@ -129,72 +135,23 @@
 
     def _ArchiveCB(self, con, iq_obj):
         log.debug('_ArchiveCB %s' % iq_obj.getType())
-        if iq_obj.getType() == 'error':
-            self.dispatch('ARCHIVING_ERROR', iq_obj.getErrorMsg())
+        gajim.nec.push_incoming_event(ArchivingReceivedEvent(None, conn=self,
+            stanza=iq_obj))
+        raise common.xmpp.NodeProcessed
+
+    def _nec_archiving_changed_received(self, obj):
+        if obj.conn.name != self.name:
             return
-        elif iq_obj.getType() not in ('result', 'set'):
-            return
+        for key in ('auto', 'method_auto', 'method_local', 'method_manual',
+        'default'):
+            if key in obj.conf:
+                self.__dict__[key] = obj.conf[key]
 
-        if iq_obj.getTag('pref'):
-            pref = iq_obj.getTag('pref')
+        for jid, pref in obj.new_items.items():
+            self.items[jid] = pref
 
-            if pref.getTag('auto'):
-                self.auto = pref.getTagAttr('auto', 'save')
-                log.debug('archiving preference: auto: %s' % self.auto)
-                self.dispatch('ARCHIVING_CHANGED', ('auto',
-                        self.auto))
-
-            method_auto = pref.getTag('method', attrs={'type': 'auto'})
-            if method_auto:
-                self.method_auto = method_auto.getAttr('use')
-                self.dispatch('ARCHIVING_CHANGED', ('method_auto',
-                        self.method_auto))
-
-            method_local = pref.getTag('method', attrs={'type': 'local'})
-            if method_local:
-                self.method_local = method_local.getAttr('use')
-                self.dispatch('ARCHIVING_CHANGED', ('method_local',
-                        self.method_local))
-
-            method_manual = pref.getTag('method', attrs={'type': 'manual'})
-            if method_manual:
-                self.method_manual = method_manual.getAttr('use')
-                self.dispatch('ARCHIVING_CHANGED', ('method_manual',
-                        self.method_manual))
-
-            log.debug('archiving preferences: method auto: %s, local: %s, '
-                    'manual: %s' % (self.method_auto, self.method_local,
-                    self.method_manual))
-
-            if pref.getTag('default'):
-                default = pref.getTag('default')
-                log.debug('archiving preferences: default otr: %s, save: %s, '
-                        'expire: %s, unset: %s' % (default.getAttr('otr'),
-                        default.getAttr('save'), default.getAttr('expire'),
-                        default.getAttr('unset')))
-                self.default = {
-                        'expire': default.getAttr('expire'),
-                        'otr': default.getAttr('otr'),
-                        'save': default.getAttr('save'),
-                        'unset': default.getAttr('unset')}
-                self.dispatch('ARCHIVING_CHANGED', ('default',
-                        self.default))
-            for item in pref.getTags('item'):
-                log.debug('archiving preferences for jid %s: otr: %s, save: 
%s, '
-                        'expire: %s' % (item.getAttr('jid'), 
item.getAttr('otr'),
-                        item.getAttr('save'), item.getAttr('expire')))
-                self.items[item.getAttr('jid')] = {
-                        'expire': item.getAttr('expire'),
-                        'otr': item.getAttr('otr'), 'save': 
item.getAttr('save')}
-                self.dispatch('ARCHIVING_CHANGED', ('item',
-                        item.getAttr('jid'), self.items[item.getAttr('jid')]))
-        elif iq_obj.getTag('itemremove'):
-            for item in pref.getTags('item'):
-                del self.items[item.getAttr('jid')]
-                self.dispatch('ARCHIVING_CHANGED', ('itemremove',
-                        item.getAttr('jid')))
-
-        raise common.xmpp.NodeProcessed
+        for jid in obj.removed_items:
+            del self.items[jid]
 
     def request_collections_list_page(self, with_='', start=None, end=None,
     after=None, max=30, exact_match=False):
diff -r b372293ffb6a -r 75e646695339 src/dialogs.py
--- a/src/dialogs.py    Fri Nov 05 11:09:33 2010 +0100
+++ b/src/dialogs.py    Fri Nov 05 20:36:45 2010 +0100
@@ -3610,6 +3610,12 @@
 
         self.window.set_title(_('Archiving Preferences for %s') % self.account)
 
+        gajim.ged.register_event_handler(
+            'archiving-preferences-changed-received', ged.GUI1,
+            self._nec_archiving_changed_received)
+        gajim.ged.register_event_handler('archiving-error-received', ged.GUI1,
+            self._nec_archiving_error)
+
         self.window.show_all()
 
         self.xml.connect_signals(self)
@@ -3687,31 +3693,32 @@
         if new_key_name in gajim.interface.instances[self.account]:
             return gajim.interface.instances[self.account][new_key_name]
 
-    def archiving_changed(self, data):
-        if data[0] in ('auto', 'method_auto', 'method_local', 'method_manual'):
-            if data[0] in self.waiting:
-                self.waiting.remove(data[0])
-        elif data[0] == 'default':
+    def _nec_archiving_changed_received(self, obj):
+        if obj.conn.name != self.account:
+            return
+        for key in ('auto', 'method_auto', 'method_local', 'method_manual'):
+            if key in obj.conf and key in self.waiting:
+                self.waiting.remove(key)
+        if 'default' in obj.conf:
             key_name = 'edit_item_archiving_preferences_%s' % \
                 self.current_item
             if key_name in gajim.interface.instances[self.account]:
                 gajim.interface.instances[self.account][key_name].\
-                    response_arrived(data[1:])
+                    response_arrived(obj.conf['default'])
             self.fill_items(True)
-        elif data[0] == 'item':
+        for jid, pref in obj.new_items.items():
             child = self.get_child_window()
             if child:
                 is_new = not child.item
-                child.response_arrived(data[1:])
+                child.response_arrived(pref)
                 if is_new:
                     model = self.item_treeview.get_model()
-                    model.append((data[1], data[2]['expire'], data[2]['otr'],
-                        data[2]['save']))
-                    return
+                    model.append((jid, pref['expire'], pref['otr'],
+                        pref['save']))
+                    continue
             self.fill_items(True)
-        elif data[0] == 'itemremove' == self.waiting:
-            if data[0] in self.waiting:
-                self.waiting.remove(data[0])
+        if 'itemremove' in self.waiting and obj.removed_items:
+            self.waiting.remove('itemremove')
             self.fill_items(True)
 
     def fill_items(self, clear=False):
@@ -3728,22 +3735,28 @@
             model.append((item, expire_value, item_config['otr'],
                 item_config['save']))
 
-    def archiving_error(self, error):
+    def _nec_archiving_error(self, obj):
+        if obj.conn.name != self.account:
+            return
         if self.waiting:
             pritext = _('There is an error')
-            sectext = error
+            sectext = obj.error_msg
             ErrorDialog(pritext, sectext)
             self.waiting.pop()
         else:
             child = self.get_child_window()
             if child:
-                child.error_arrived(error)
-        print error
+                child.error_arrived(obj.error_msg)
 
     def on_close_button_clicked(self, widget):
         self.window.destroy()
 
     def on_archiving_preferences_window_destroy(self, widget):
+        gajim.ged.remove_event_handler(
+            'archiving-preferences-changed-received', ged.GUI1,
+            self._nec_archiving_changed_received)
+        gajim.ged.remove_event_handler('archiving-error-received', ged.GUI1,
+            self._nec_archiving_error)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to