From 48524a60c0d93e17041306976dc004402e9f322a Mon Sep 17 00:00:00 2001
From: Jefry Lagrange <jefry.reyes@gmail.com>
Date: Thu, 22 Mar 2012 00:56:11 -0400
Subject: [PATCH] fix handling file transfer cancel properly

---
 src/common/jingle.py         |  2 ++
 src/common/jingle_session.py | 10 +++++++---
 src/gui_interface.py         |  1 -
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/common/jingle.py b/src/common/jingle.py
index d4e5b6ada5..5a9c39dee4 100644
--- a/src/common/jingle.py
+++ b/src/common/jingle.py
@@ -149,6 +149,8 @@ class ConnectionJingle(object):
             return
         use_security = contact.supports(xmpp.NS_JINGLE_XTLS)
         jingle = JingleSession(self, weinitiate=True, jid=jid)
+        # this is a file transfer
+        jingle.session_type_FT = True
         self._sessions[jingle.sid] = jingle
         file_props['sid'] = jingle.sid
         if contact.supports(xmpp.NS_JINGLE_BYTESTREAM):
diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py
index 9518e3b982..a83cb191ab 100644
--- a/src/common/jingle_session.py
+++ b/src/common/jingle_session.py
@@ -102,6 +102,8 @@ class JingleSession(object):
         # file. Could be 'md5', 'sha-1', etc...
         self.hash_algo = None
         self.file_hash = None
+        # Tells whether this session is a file transfer or not
+        self.session_type_FT = False
         # callbacks to call on proper contents
         # use .prepend() to add new callbacks, especially when you're going
         # to send error instead of ack
@@ -585,9 +587,11 @@ class JingleSession(object):
         else:
             # TODO
             text = reason
-        gajim.nec.push_incoming_event(JingleTransferCancelledEvent(None,
-            conn=self.connection, jingle_session=self, media=None,
-            reason=text))
+            
+        if reason == 'cancel' and self.session_type_FT:
+            gajim.nec.push_incoming_event(JingleTransferCancelledEvent(None,
+                conn=self.connection, jingle_session=self, media=None,
+                reason=text))
 
     def __broadcast_all(self, stanza, jingle, error, action):
         """
diff --git a/src/gui_interface.py b/src/gui_interface.py
index 7566db12b7..d16b4f7e6e 100644
--- a/src/gui_interface.py
+++ b/src/gui_interface.py
@@ -1166,7 +1166,6 @@ class Interface:
 
         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,
-- 
GitLab