From 1c7b265c9ca42171e0e65c977342516670cc21c3 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Tue, 28 Jul 2009 23:13:34 +0200 Subject: [PATCH] better file transfer error handling. Fixes #5064 --- src/common/socks5.py | 14 ++++++++++++-- src/filetransfers_window.py | 3 +-- src/gajim.py | 7 +++++-- src/roster_window.py | 7 ++++++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/common/socks5.py b/src/common/socks5.py index d9d591c79f..e1c1099ad8 100644 --- a/src/common/socks5.py +++ b/src/common/socks5.py @@ -489,7 +489,12 @@ class Socks5: return None fd = None if self.remaining_buff != '': - fd = self.get_fd() + try: + fd = self.get_fd() + except IOError, e: + self.disconnect(False) + self.file_props['error'] = -6 # file system error + return 0 fd.write(self.remaining_buff) lenn = len(self.remaining_buff) current_time = self.idlequeue.current_time() @@ -505,7 +510,12 @@ class Socks5: self.file_props['completed'] = True return 0 else: - fd = self.get_fd() + try: + fd = self.get_fd() + except IOError, e: + self.disconnect(False) + self.file_props['error'] = -6 # file system error + return 0 try: buff = self._recv(MAX_BUFF_LEN) except Exception: diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py index 82974ca5b5..2b3642da7d 100644 --- a/src/filetransfers_window.py +++ b/src/filetransfers_window.py @@ -228,8 +228,7 @@ _('Connection with peer cannot be established.')) sectext += '\n\t' + _('Recipient: %s') % jid if error_msg: sectext += '\n\t' + _('Error message: %s') % error_msg - dialogs.ErrorDialog(_('File transfer stopped by the contact at the other ' - 'end'), sectext) + dialogs.ErrorDialog(_('File transfer stopped'), sectext) self.tree.get_selection().unselect_all() def show_file_send_request(self, account, contact): diff --git a/src/gajim.py b/src/gajim.py index 1f114563dc..5bdea09a9d 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -1768,7 +1768,10 @@ class Interface: if gajim.config.get('notify_on_file_complete'): ft.show_completed(jid, file_props) elif file_props['error'] == -1: - ft.show_stopped(jid, file_props) + ft.show_stopped(jid, file_props, + error_msg=_('Remote contact stopped transfer')) + elif file_props['error'] == -6: + ft.show_stopped(jid, file_props, error_msg=_('Error opening file')) return msg_type = '' @@ -1777,7 +1780,7 @@ class Interface: 'notify_on_file_complete'): msg_type = 'file-completed' event_type = _('File Transfer Completed') - elif file_props['error'] == -1: + elif file_props['error'] in (-1, -6): msg_type = 'file-stopped' event_type = _('File Transfer Stopped') diff --git a/src/roster_window.py b/src/roster_window.py index f2ccdc3707..65fc33bafd 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1838,7 +1838,12 @@ class RosterWindow: gajim.events.remove_events(account, jid, event) return True elif event.type_ in ('file-error', 'file-stopped'): - ft.show_stopped(jid, data) + msg_error = '' + if data['error'] == -1: + msg_err = _('Remote contact stopped transfer') + elif data['error'] == -6: + msg_err = _('Error opening file') + ft.show_stopped(jid, data, error_msg=msg_err) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'file-completed': -- GitLab