diff options
author | Louis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk> | 2010-12-03 14:36:26 -0500 |
---|---|---|
committer | Louis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk> | 2010-12-03 15:51:12 -0500 |
commit | 7bb061f6408b43fd29a75d6b2536a0ec92045094 (patch) | |
tree | da8411eb06377e7057d3249688d6d2fd0de9d242 | |
parent | c9090ba21630ffe52ffe324c6e953c34696e3c8d (diff) |
ft: set state as Stopped when session is disposed before completion
-rw-r--r-- | butterfly/channel/file_transfer.py | 23 |
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 |