diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index ad348d4a3e404ada791c46e7f5c0638b5c8ca21c..e03a610f73320ee86e38231829269b17a139b85f 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 3ddf45eac175039f35935ad7d47f8fab407ccde5..9518e3b982c48f927271fada42928e2e4abb49b7 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 c989995d68d7646bd947f0888d7dd8aa49d62f10..7566db12b74cb09444b2720cd7b2bd4c49a3fd06 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],