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