use NEC to handle error messages
This commit is contained in:
parent
3e2bfd67a3
commit
da524c94fd
|
@ -896,12 +896,15 @@ class ConnectionHandlersBase:
|
|||
# keep track of sessions this connection has with other JIDs
|
||||
self.sessions = {}
|
||||
|
||||
def _ErrorCB(self, con, iq_obj):
|
||||
log.debug('ErrorCB')
|
||||
id_ = unicode(iq_obj.getID())
|
||||
if id_ in self.last_ids:
|
||||
gajim.ged.register_event_handler('error-received', ged.CORE,
|
||||
self._nec_error_received)
|
||||
|
||||
def _nec_error_received(self, obj):
|
||||
if obj.conn.name != self.name:
|
||||
return
|
||||
if obj.id_ in self.last_ids:
|
||||
gajim.nec.push_incoming_event(LastResultReceivedEvent(None,
|
||||
conn=self, iq_obj=iq_obj))
|
||||
conn=self, iq_obj=obj.iq_obj))
|
||||
return True
|
||||
|
||||
def _LastResultCB(self, con, iq_obj):
|
||||
|
@ -1103,6 +1106,8 @@ ConnectionJingle, ConnectionIBBytestream):
|
|||
gajim.nec.register_incoming_event(RosternotesReceivedEvent)
|
||||
gajim.ged.register_event_handler('roster-received', ged.CORE,
|
||||
self._nec_roster_received)
|
||||
gajim.ged.register_event_handler('error-received', ged.CORE,
|
||||
self._nec_error_received)
|
||||
|
||||
def build_http_auth_answer(self, iq_obj, answer):
|
||||
if not self.connection or self.connected < 2:
|
||||
|
@ -1133,21 +1138,20 @@ ConnectionJingle, ConnectionIBBytestream):
|
|||
|
||||
def _ErrorCB(self, con, iq_obj):
|
||||
log.debug('ErrorCB')
|
||||
if ConnectionHandlersBase._ErrorCB(self, con, iq_obj):
|
||||
gajim.nec.push_incoming_event(ErrorReceivedEvent(None, conn=self,
|
||||
iq_obj=iq_obj))
|
||||
|
||||
def _nec_error_received(self, obj):
|
||||
if obj.conn.name != self.name:
|
||||
return
|
||||
id_ = unicode(iq_obj.getID())
|
||||
if id_ in self.version_ids:
|
||||
if obj.id_ in self.version_ids:
|
||||
gajim.nec.push_incoming_event(VersionResultReceivedEvent(None,
|
||||
conn=self, iq_obj=iq_obj))
|
||||
return
|
||||
if id_ in self.entity_time_ids:
|
||||
gajim.nec.push_incoming_event(LastResultReceivedEvent(None,
|
||||
conn=self, iq_obj=iq_obj))
|
||||
return
|
||||
jid_from = helpers.get_full_jid_from_iq(iq_obj)
|
||||
errmsg = iq_obj.getErrorMsg()
|
||||
errcode = iq_obj.getErrorCode()
|
||||
self.dispatch('ERROR_ANSWER', (id_, jid_from, errmsg, errcode))
|
||||
conn=self, iq_obj=obj.iq_obj))
|
||||
return True
|
||||
if obj.id_ in self.entity_time_ids:
|
||||
gajim.nec.push_incoming_event(TimeResultReceivedEvent(None,
|
||||
conn=self, iq_obj=obj.iq_obj))
|
||||
return True
|
||||
|
||||
def _nec_private_storate_bookmarks_received(self, obj):
|
||||
if obj.conn.name != self.name:
|
||||
|
|
|
@ -547,3 +547,14 @@ class SearchResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
f[i.getName()] = i.getData()
|
||||
self.data.append(f)
|
||||
return True
|
||||
|
||||
class ErrorReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||
name = 'error-received'
|
||||
base_network_events = []
|
||||
|
||||
def generate(self):
|
||||
self.get_id()
|
||||
self.get_jid_resource()
|
||||
self.errmsg = self.iq_obj.getErrorMsg()
|
||||
self.errcode = self.iq_obj.getErrorCode()
|
||||
return True
|
|
@ -167,41 +167,38 @@ class Interface:
|
|||
'id': obj.iq_id}, sec_msg, on_response_yes=(on_yes, obj),
|
||||
on_response_no=(response, obj, 'no'))
|
||||
|
||||
def handle_event_error_answer(self, account, array):
|
||||
#('ERROR_ANSWER', account, (id, jid_from, errmsg, errcode))
|
||||
id_, jid_from, errmsg, errcode = array
|
||||
if unicode(errcode) in ('400', '403', '406') and id_:
|
||||
def handle_event_error_answer(self, obj):
|
||||
#('ERROR_ANSWER', account, (id_, fjid, errmsg, errcode))
|
||||
if unicode(obj.errcode) in ('400', '403', '406') and obj.id_:
|
||||
# show the error dialog
|
||||
ft = self.instances['file_transfers']
|
||||
sid = id_
|
||||
if len(id_) > 3 and id_[2] == '_':
|
||||
sid = id_[3:]
|
||||
sid = obj.id_
|
||||
if len(obj.id_) > 3 and obj.id_[2] == '_':
|
||||
sid = obj.id_[3:]
|
||||
if sid in ft.files_props['s']:
|
||||
file_props = ft.files_props['s'][sid]
|
||||
if unicode(errcode) == '400':
|
||||
if unicode(obj.errcode) == '400':
|
||||
file_props['error'] = -3
|
||||
else:
|
||||
file_props['error'] = -4
|
||||
self.handle_event_file_request_error(account,
|
||||
(jid_from, file_props, errmsg))
|
||||
conn = gajim.connections[account]
|
||||
conn.disconnect_transfer(file_props)
|
||||
self.handle_event_file_request_error(obj.conn.name, (obj.fjid,
|
||||
file_props, obj.errmsg))
|
||||
obj.conn.disconnect_transfer(file_props)
|
||||
return
|
||||
elif unicode(errcode) == '404':
|
||||
conn = gajim.connections[account]
|
||||
sid = id_
|
||||
if len(id_) > 3 and id_[2] == '_':
|
||||
sid = id_[3:]
|
||||
if sid in conn.files_props:
|
||||
file_props = conn.files_props[sid]
|
||||
self.handle_event_file_send_error(account,
|
||||
(jid_from, file_props))
|
||||
conn.disconnect_transfer(file_props)
|
||||
elif unicode(obj.errcode) == '404':
|
||||
sid = obj.id_
|
||||
if len(obj.id_) > 3 and obj.id_[2] == '_':
|
||||
sid = obj.id_[3:]
|
||||
if sid in obj.conn.files_props:
|
||||
file_props = obj.conn.files_props[sid]
|
||||
self.handle_event_file_send_error(obj.conn.name, (obj.fjid,
|
||||
file_props))
|
||||
obj.conn.disconnect_transfer(file_props)
|
||||
return
|
||||
|
||||
ctrl = self.msg_win_mgr.get_control(jid_from, account)
|
||||
ctrl = self.msg_win_mgr.get_control(obj.fjid, obj.conn.name)
|
||||
if ctrl and ctrl.type_id == message_control.TYPE_GC:
|
||||
ctrl.print_conversation('Error %s: %s' % (array[2], array[1]))
|
||||
ctrl.print_conversation('Error %s: %s' % (obj.errcode, obj.errmsg))
|
||||
|
||||
def handle_event_con_type(self, account, con_type):
|
||||
# ('CON_TYPE', account, con_type) which can be 'ssl', 'tls', 'plain'
|
||||
|
@ -2069,7 +2066,6 @@ class Interface:
|
|||
'ERROR': [self.handle_event_error],
|
||||
'DB_ERROR': [self.handle_event_db_error],
|
||||
'INFORMATION': [self.handle_event_information],
|
||||
'ERROR_ANSWER': [self.handle_event_error_answer],
|
||||
'STATUS': [self.handle_event_status],
|
||||
'NEW_JID': [self.handle_event_new_jid],
|
||||
'NOTIFY': [self.handle_event_notify],
|
||||
|
@ -2142,6 +2138,7 @@ class Interface:
|
|||
'ARCHIVING_CHANGED': [self.handle_event_archiving_changed],
|
||||
'ARCHIVING_ERROR': [self.handle_event_archiving_error],
|
||||
'bookmarks-received': [self.handle_event_bookmarks],
|
||||
'error-received': [self.handle_event_error_answer],
|
||||
'gmail-notify': [self.handle_event_gmail_notify],
|
||||
'http-auth-received': [self.handle_event_http_auth],
|
||||
'last-result-received': [self.handle_event_last_status_time],
|
||||
|
|
Loading…
Reference in New Issue