From c5ebac3f776df0d809087455883861c5fda62e1e Mon Sep 17 00:00:00 2001 From: Jefry Lagrange Date: Wed, 21 Mar 2012 15:54:46 -0400 Subject: [PATCH] handles file transfer cancel properly --- src/common/connection_handlers_events.py | 10 ++++++++++ src/common/jingle_session.py | 2 +- src/gui_interface.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index ad348d4a3..e03a610f7 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1399,6 +1399,16 @@ class JingleDisconnectedReceivedEvent(nec.NetworkIncomingEvent): self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid) self.sid = self.jingle_session.sid return True + +class JingleTransferCancelledEvent(nec.NetworkIncomingEvent): + name = 'jingleFT-cancelled-received' + base_network_events = [] + + def generate(self): + 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 JingleErrorReceivedEvent(nec.NetworkIncomingEvent): name = 'jingle-error-received' diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py index 3ddf45eac..9518e3b98 100644 --- a/src/common/jingle_session.py +++ b/src/common/jingle_session.py @@ -585,7 +585,7 @@ class JingleSession(object): else: # TODO text = reason - gajim.nec.push_incoming_event(JingleDisconnectedReceivedEvent(None, + gajim.nec.push_incoming_event(JingleTransferCancelledEvent(None, conn=self.connection, jingle_session=self, media=None, reason=text)) diff --git a/src/gui_interface.py b/src/gui_interface.py index c989995d6..7566db12b 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -1150,6 +1150,24 @@ class Interface: 'resource. Please type a new one'), resource=proposed_resource, ok_handler=on_ok) + def handle_event_jingleft_cancel(self, obj): + ft = self.instances['file_transfers'] + file_props = None + + # get the file_props of our session + for sid in obj.conn.files_props: + fp = obj.conn.files_props[sid] + if fp['session-sid'] == obj.sid: + file_props = fp + break + + ft.set_status(file_props['type'], file_props['sid'], 'stop') + file_props['error'] = -4 # is it the right error code? + + ft.show_stopped(obj.jid, file_props, 'Peer cancelled ' + + 'the transfer') + obj.conn.delete_jingle_session(obj.sid) + def handle_event_jingle_incoming(self, obj): # ('JINGLE_INCOMING', account, peer jid, sid, tuple-of-contents==(type, # data...)) @@ -1486,6 +1504,7 @@ class Interface: self.handle_event_jingle_disconnected], 'jingle-error-received': [self.handle_event_jingle_error], 'jingle-request-received': [self.handle_event_jingle_incoming], + 'jingleFT-cancelled-received': [self.handle_event_jingleft_cancel], 'last-result-received': [self.handle_event_last_status_time], 'message-error': [self.handle_event_msgerror], 'message-not-sent': [self.handle_event_msgnotsent],