use NEC to handle archiving stanza.
This commit is contained in:
parent
d957a590f7
commit
344181fc01
5 changed files with 131 additions and 97 deletions
|
@ -1102,6 +1102,9 @@ ConnectionJingle, ConnectionIBBytestream):
|
|||
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)
|
||||
|
|
|
@ -1152,4 +1152,79 @@ class JingleErrorReceivedEvent(nec.NetworkIncomingEvent):
|
|||
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
|
|
@ -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 @@ class ConnectionArchive:
|
|||
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,73 +135,24 @@ class ConnectionArchive:
|
|||
|
||||
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())
|
||||
return
|
||||
elif iq_obj.getType() not in ('result', 'set'):
|
||||
return
|
||||
|
||||
if iq_obj.getTag('pref'):
|
||||
pref = iq_obj.getTag('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')))
|
||||
|
||||
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
|
||||
for key in ('auto', 'method_auto', 'method_local', 'method_manual',
|
||||
'default'):
|
||||
if key in obj.conf:
|
||||
self.__dict__[key] = obj.conf[key]
|
||||
|
||||
for jid, pref in obj.new_items.items():
|
||||
self.items[jid] = pref
|
||||
|
||||
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):
|
||||
iq_ = common.xmpp.Iq('get')
|
||||
|
|
|
@ -3610,6 +3610,12 @@ class ArchivingPreferencesWindow:
|
|||
|
||||
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 @@ class ArchivingPreferencesWindow:
|
|||
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 @@ class ArchivingPreferencesWindow:
|
|||
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)
|
||||
if 'archiving_preferences' in gajim.interface.instances[self.account]:
|
||||
del gajim.interface.instances[self.account]['archiving_preferences']
|
||||
|
||||
|
|
|
@ -1827,18 +1827,6 @@ class Interface:
|
|||
if pm_ctrl and hasattr(pm_ctrl, "update_contact"):
|
||||
pm_ctrl.update_contact()
|
||||
|
||||
def handle_event_archiving_changed(self, account, data):
|
||||
# ('ARCHIVING_CHANGED', account, (type, value)
|
||||
if 'archiving_preferences' in self.instances[account]:
|
||||
self.instances[account]['archiving_preferences'].archiving_changed(
|
||||
data)
|
||||
|
||||
def handle_event_archiving_error(self, account, data):
|
||||
# ('ARCHIVING_CHANGED', account, (error_msg,))
|
||||
if 'archiving_preferences' in self.instances[account]:
|
||||
self.instances[account]['archiving_preferences'].archiving_error(
|
||||
data)
|
||||
|
||||
def create_core_handlers_list(self):
|
||||
self.handlers = {
|
||||
'WARNING': [self.handle_event_warning],
|
||||
|
@ -1899,8 +1887,6 @@ class Interface:
|
|||
'INSECURE_PASSWORD': [self.handle_event_insecure_password],
|
||||
'PEP_RECEIVED': [self.handle_event_pep_received],
|
||||
'CAPS_RECEIVED': [self.handle_event_caps_received],
|
||||
'ARCHIVING_CHANGED': [self.handle_event_archiving_changed],
|
||||
'ARCHIVING_ERROR': [self.handle_event_archiving_error],
|
||||
'bookmarks-received': [self.handle_event_bookmarks],
|
||||
'gc-invitation-received': [self.handle_event_gc_invitation],
|
||||
'gc-presence-received': [self.handle_event_gc_presence],
|
||||
|
|
Loading…
Add table
Reference in a new issue