[Sugar-devel] [PATCH Browse 2/2] Delete temporary files under all conditions
Rafael Ortiz
rafael at activitycentral.com
Mon May 23 11:39:58 EDT 2011
On Sat, May 21, 2011 at 10:24 AM, Sascha Silbe <silbe at activitycentral.com>wrote:
> If downloads were cancelled, Browse could leave a (potentially large)
> temporary file behind. Now we delete them whenever they get cancelled
> (but not if Browse crashes).
>
> Based on patches by Rafael Ortiz <rafael at activitycentral.com> and
> Sebastian Silva <sebastian at somosazucar.org>.
>
> Signed-off-by: Sascha Silbe <silbe at activitycentral.com>
> ---
> downloadmanager.py | 37 ++++++++++++++++++++++---------------
> 1 files changed, 22 insertions(+), 15 deletions(-)
>
> diff --git a/downloadmanager.py b/downloadmanager.py
> index 934693f..a88389f 100644
> --- a/downloadmanager.py
> +++ b/downloadmanager.py
> @@ -38,7 +38,6 @@ from sugar.graphics.alert import Alert, TimeoutAlert
> from sugar.graphics.icon import Icon
> from sugar.graphics import style
> from sugar.activity import activity
> -
> # #3903 - this constant can be removed and assumed to be 1 when
> dbus-python
> # 0.82.3 is the only version used
> import dbus
> @@ -69,9 +68,8 @@ def remove_all_downloads():
> for download in _active_downloads:
> download.cancelable.cancel(NS_ERROR_FAILURE)
> if download.dl_jobject is not None:
> - download.datastore_deleted_handler.remove()
> datastore.delete(download.dl_jobject.object_id)
> - download.cleanup_datastore_write()
> + download.cleanup()
>
>
> class HelperAppLauncherDialog:
> @@ -170,6 +168,7 @@ class Download:
> elif state_flags & interfaces.nsIWebProgressListener.STATE_STOP:
> if NS_FAILED(status):
> # download cancelled
> + self.cleanup()
> return
>
> self._stop_alert = Alert()
> @@ -252,14 +251,13 @@ class Download:
> global _active_downloads
> if response_id is gtk.RESPONSE_CANCEL:
> logging.debug('Download Canceled')
> + logging.debug('target_path=%r', self._target_file.path)
> self.cancelable.cancel(NS_ERROR_FAILURE)
> try:
> - self.datastore_deleted_handler.remove()
> datastore.delete(self._object_id)
> except Exception:
> logging.exception('Object has been deleted already')
> - if self.dl_jobject is not None:
> - self.cleanup_datastore_write()
> + self.cleanup()
> if self._stop_alert is not None:
> self._activity.remove_alert(self._stop_alert)
>
> @@ -272,21 +270,30 @@ class Download:
> activity.show_object_in_journal(self._object_id)
> self._activity.remove_alert(alert)
>
> - def cleanup_datastore_write(self):
> + def cleanup(self):
> global _active_downloads
> - _active_downloads.remove(self)
> + if self in _active_downloads:
> + _active_downloads.remove(self)
>
> - if os.path.isfile(self.dl_jobject.file_path):
> - os.remove(self.dl_jobject.file_path)
> - self.dl_jobject.destroy()
> - self.dl_jobject = None
> + if self.datastore_deleted_handler is not None:
> + self.datastore_deleted_handler.remove()
> + self.datastore_deleted_handler = None
> +
> + if os.path.isfile(self._target_file.path):
> + os.remove(self._target_file.path)
> + if os.path.isfile(self._target_file.path + '.part'):
> + os.remove(self._target_file.path + '.part')
> +
> + if self.dl_jobject is not None:
> + self.dl_jobject.destroy()
> + self.dl_jobject = None
>
> def _internal_save_cb(self):
> - self.cleanup_datastore_write()
> + self.cleanup()
>
> def _internal_save_error_cb(self, err):
> logging.error('Error saving activity object to datastore: %s', err)
> - self.cleanup_datastore_write()
> + self.cleanup()
>
> def onProgressChange64(self, web_progress, request, cur_self_progress,
> max_self_progress, cur_total_progress,
> @@ -348,7 +355,7 @@ class Download:
> if self in _active_downloads:
> # TODO: Use NS_BINDING_ABORTED instead of NS_ERROR_FAILURE.
> self.cancelable.cancel(NS_ERROR_FAILURE)
> - _active_downloads.remove(self)
> + self.cleanup()
>
>
>
> components.registrar.registerFactory('{23c51569-e9a1-4a92-adeb-3723db82ef7c}',
> --
> 1.7.4.1
>
>
Tested and works as expected, we still need to address the case when browse
crashes.
can you apply to mainline ?.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20110523/f7940539/attachment.html>
More information about the Sugar-devel
mailing list