summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>2010-12-03 14:36:26 -0500
committerLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>2010-12-03 15:51:12 -0500
commit7bb061f6408b43fd29a75d6b2536a0ec92045094 (patch)
treeda8411eb06377e7057d3249688d6d2fd0de9d242
parentc9090ba21630ffe52ffe324c6e953c34696e3c8d (diff)
ft: set state as Stopped when session is disposed before completion
-rw-r--r--butterfly/channel/file_transfer.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/butterfly/channel/file_transfer.py b/butterfly/channel/file_transfer.py
index 053fa4f..154328f 100644
--- a/butterfly/channel/file_transfer.py
+++ b/butterfly/channel/file_transfer.py
@@ -80,6 +80,7 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer):
handles.append(session.connect("canceled", self._transfer_canceled))
handles.append(session.connect("progressed", self._transfer_progressed))
handles.append(session.connect("completed", self._transfer_completed))
+ handles.append(session.connect("disposed", self._transfer_disposed))
self._handles = handles
self._sources = []
@@ -173,12 +174,16 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer):
def Close(self):
logger.debug("Close")
- self.cancel()
- if self.state != telepathy.FILE_TRANSFER_STATE_COMPLETED:
- self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED,
- telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED)
+ try:
+ self.cancel()
+ if self.state != telepathy.FILE_TRANSFER_STATE_COMPLETED:
+ self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED,
+ telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED)
+
+ self.cleanup()
+ except:
+ pass
- self.cleanup()
telepathy.server.ChannelTypeFileTransfer.Close(self)
def cancel(self):
@@ -272,7 +277,13 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer):
logger.debug("Transfer completed")
self.set_state(telepathy.FILE_TRANSFER_STATE_COMPLETED,
telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_NONE)
- self.cleanup()
+
+ def _transfer_disposed(self, session):
+ if self.state not in (telepathy.FILE_TRANSFER_STATE_CANCELLED,
+ telepathy.FILE_TRANSFER_STATE_COMPLETED):
+ logger.debug("Transfer has been disposed before completion")
+ self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED,
+ telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED)
def _transfer_progressed(self, session, size):
self._transferred += size