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(StreamConflictReceivedEvent)
|
||||||
gajim.nec.register_incoming_event(PresenceReceivedEvent)
|
gajim.nec.register_incoming_event(PresenceReceivedEvent)
|
||||||
gajim.nec.register_incoming_event(MessageReceivedEvent)
|
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,
|
gajim.ged.register_event_handler('http-auth-received', ged.CORE,
|
||||||
self._nec_http_auth_received)
|
self._nec_http_auth_received)
|
||||||
|
|
|
@ -1153,3 +1153,78 @@ class JingleErrorReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
|
self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
|
||||||
self.sid = self.jingle_session.sid
|
self.sid = self.jingle_session.sid
|
||||||
return True
|
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
|
import common.xmpp
|
||||||
|
from common import gajim
|
||||||
|
from common import ged
|
||||||
|
from common.connection_handlers_events import ArchivingReceivedEvent
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger('gajim.c.message_archiving')
|
log = logging.getLogger('gajim.c.message_archiving')
|
||||||
|
@ -39,6 +42,9 @@ class ConnectionArchive:
|
||||||
self.method_manual = None
|
self.method_manual = None
|
||||||
self.default = None
|
self.default = None
|
||||||
self.items = {}
|
self.items = {}
|
||||||
|
gajim.ged.register_event_handler(
|
||||||
|
'archiving-preferences-changed-received', ged.CORE,
|
||||||
|
self._nec_archiving_changed_received)
|
||||||
|
|
||||||
def request_message_archiving_preferences(self):
|
def request_message_archiving_preferences(self):
|
||||||
iq_ = common.xmpp.Iq('get')
|
iq_ = common.xmpp.Iq('get')
|
||||||
|
@ -129,73 +135,24 @@ class ConnectionArchive:
|
||||||
|
|
||||||
def _ArchiveCB(self, con, iq_obj):
|
def _ArchiveCB(self, con, iq_obj):
|
||||||
log.debug('_ArchiveCB %s' % iq_obj.getType())
|
log.debug('_ArchiveCB %s' % iq_obj.getType())
|
||||||
if iq_obj.getType() == 'error':
|
gajim.nec.push_incoming_event(ArchivingReceivedEvent(None, conn=self,
|
||||||
self.dispatch('ARCHIVING_ERROR', iq_obj.getErrorMsg())
|
stanza=iq_obj))
|
||||||
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')))
|
|
||||||
|
|
||||||
raise common.xmpp.NodeProcessed
|
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,
|
def request_collections_list_page(self, with_='', start=None, end=None,
|
||||||
after=None, max=30, exact_match=False):
|
after=None, max=30, exact_match=False):
|
||||||
iq_ = common.xmpp.Iq('get')
|
iq_ = common.xmpp.Iq('get')
|
||||||
|
|
|
@ -3610,6 +3610,12 @@ class ArchivingPreferencesWindow:
|
||||||
|
|
||||||
self.window.set_title(_('Archiving Preferences for %s') % self.account)
|
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.window.show_all()
|
||||||
|
|
||||||
self.xml.connect_signals(self)
|
self.xml.connect_signals(self)
|
||||||
|
@ -3687,31 +3693,32 @@ class ArchivingPreferencesWindow:
|
||||||
if new_key_name in gajim.interface.instances[self.account]:
|
if new_key_name in gajim.interface.instances[self.account]:
|
||||||
return gajim.interface.instances[self.account][new_key_name]
|
return gajim.interface.instances[self.account][new_key_name]
|
||||||
|
|
||||||
def archiving_changed(self, data):
|
def _nec_archiving_changed_received(self, obj):
|
||||||
if data[0] in ('auto', 'method_auto', 'method_local', 'method_manual'):
|
if obj.conn.name != self.account:
|
||||||
if data[0] in self.waiting:
|
return
|
||||||
self.waiting.remove(data[0])
|
for key in ('auto', 'method_auto', 'method_local', 'method_manual'):
|
||||||
elif data[0] == 'default':
|
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' % \
|
key_name = 'edit_item_archiving_preferences_%s' % \
|
||||||
self.current_item
|
self.current_item
|
||||||
if key_name in gajim.interface.instances[self.account]:
|
if key_name in gajim.interface.instances[self.account]:
|
||||||
gajim.interface.instances[self.account][key_name].\
|
gajim.interface.instances[self.account][key_name].\
|
||||||
response_arrived(data[1:])
|
response_arrived(obj.conf['default'])
|
||||||
self.fill_items(True)
|
self.fill_items(True)
|
||||||
elif data[0] == 'item':
|
for jid, pref in obj.new_items.items():
|
||||||
child = self.get_child_window()
|
child = self.get_child_window()
|
||||||
if child:
|
if child:
|
||||||
is_new = not child.item
|
is_new = not child.item
|
||||||
child.response_arrived(data[1:])
|
child.response_arrived(pref)
|
||||||
if is_new:
|
if is_new:
|
||||||
model = self.item_treeview.get_model()
|
model = self.item_treeview.get_model()
|
||||||
model.append((data[1], data[2]['expire'], data[2]['otr'],
|
model.append((jid, pref['expire'], pref['otr'],
|
||||||
data[2]['save']))
|
pref['save']))
|
||||||
return
|
continue
|
||||||
self.fill_items(True)
|
self.fill_items(True)
|
||||||
elif data[0] == 'itemremove' == self.waiting:
|
if 'itemremove' in self.waiting and obj.removed_items:
|
||||||
if data[0] in self.waiting:
|
self.waiting.remove('itemremove')
|
||||||
self.waiting.remove(data[0])
|
|
||||||
self.fill_items(True)
|
self.fill_items(True)
|
||||||
|
|
||||||
def fill_items(self, clear=False):
|
def fill_items(self, clear=False):
|
||||||
|
@ -3728,22 +3735,28 @@ class ArchivingPreferencesWindow:
|
||||||
model.append((item, expire_value, item_config['otr'],
|
model.append((item, expire_value, item_config['otr'],
|
||||||
item_config['save']))
|
item_config['save']))
|
||||||
|
|
||||||
def archiving_error(self, error):
|
def _nec_archiving_error(self, obj):
|
||||||
|
if obj.conn.name != self.account:
|
||||||
|
return
|
||||||
if self.waiting:
|
if self.waiting:
|
||||||
pritext = _('There is an error')
|
pritext = _('There is an error')
|
||||||
sectext = error
|
sectext = obj.error_msg
|
||||||
ErrorDialog(pritext, sectext)
|
ErrorDialog(pritext, sectext)
|
||||||
self.waiting.pop()
|
self.waiting.pop()
|
||||||
else:
|
else:
|
||||||
child = self.get_child_window()
|
child = self.get_child_window()
|
||||||
if child:
|
if child:
|
||||||
child.error_arrived(error)
|
child.error_arrived(obj.error_msg)
|
||||||
print error
|
|
||||||
|
|
||||||
def on_close_button_clicked(self, widget):
|
def on_close_button_clicked(self, widget):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
|
||||||
def on_archiving_preferences_window_destroy(self, widget):
|
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]:
|
if 'archiving_preferences' in gajim.interface.instances[self.account]:
|
||||||
del gajim.interface.instances[self.account]['archiving_preferences']
|
del gajim.interface.instances[self.account]['archiving_preferences']
|
||||||
|
|
||||||
|
|
|
@ -1827,18 +1827,6 @@ class Interface:
|
||||||
if pm_ctrl and hasattr(pm_ctrl, "update_contact"):
|
if pm_ctrl and hasattr(pm_ctrl, "update_contact"):
|
||||||
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):
|
def create_core_handlers_list(self):
|
||||||
self.handlers = {
|
self.handlers = {
|
||||||
'WARNING': [self.handle_event_warning],
|
'WARNING': [self.handle_event_warning],
|
||||||
|
@ -1899,8 +1887,6 @@ class Interface:
|
||||||
'INSECURE_PASSWORD': [self.handle_event_insecure_password],
|
'INSECURE_PASSWORD': [self.handle_event_insecure_password],
|
||||||
'PEP_RECEIVED': [self.handle_event_pep_received],
|
'PEP_RECEIVED': [self.handle_event_pep_received],
|
||||||
'CAPS_RECEIVED': [self.handle_event_caps_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],
|
'bookmarks-received': [self.handle_event_bookmarks],
|
||||||
'gc-invitation-received': [self.handle_event_gc_invitation],
|
'gc-invitation-received': [self.handle_event_gc_invitation],
|
||||||
'gc-presence-received': [self.handle_event_gc_presence],
|
'gc-presence-received': [self.handle_event_gc_presence],
|
||||||
|
|
Loading…
Add table
Reference in a new issue