From 32764d06d373c8fba9e87044e86e30b291730f16 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Tue, 09 Oct 2012 11:57:06 +0000 Subject: Remove temporary downloaded (cancelled) files SL #3973 When a download is cancelled for any reason WebKit leaves a temporary file called ".goutputstream-*" in the "instance" directory. This is because of a bug in GLib: * https://bugzilla.gnome.org/show_bug.cgi?id=629301 This patch is a workaround to that behaviour. Every time that Browse is started it looks for all the ".goutputstream" files in the "instance" directory and checks its mtime. If it greater than 1 day or it was created before we booted, Browse removes the old temporary file. Signed-off-by: Manuel Kaufmann Acked-by: Manuel QuiƱones --- (limited to 'webactivity.py') diff --git a/webactivity.py b/webactivity.py index d140128..6dbd222 100644 --- a/webactivity.py +++ b/webactivity.py @@ -241,6 +241,44 @@ class WebActivity(activity.Activity): else: _logger.debug('Created activity') + # README: this is a workaround to remove old temp file + # http://bugs.sugarlabs.org/ticket/3973 + self._cleanup_temp_files() + + def _cleanup_temp_files(self): + """Removes temporary files generated by Download Manager that + were cancelled by the user or failed for any reason. + + There is a bug in GLib that makes this to happen: + https://bugzilla.gnome.org/show_bug.cgi?id=629301 + """ + + try: + uptime_proc = open('/proc/uptime', 'r').read() + uptime = int(float(uptime_proc.split()[0])) + except EnvironmentError: + logging.warning('/proc/uptime could not be read') + uptime = None + + temp_path = os.path.join(self.get_activity_root(), 'instance') + now = int(time.time()) + cutoff = now - 24 * 60 * 60 # yesterday + if uptime is not None: + boot_time = now - uptime + cutoff = max(cutoff, boot_time) + + for f in os.listdir(temp_path): + if f.startswith('.goutputstream-'): + fpath = os.path.join(temp_path, f) + mtime = int(os.path.getmtime(fpath)) + if mtime < cutoff: + logging.warning('Removing old temporary file: %s', fpath) + try: + os.remove(fpath) + except EnvironmentError: + logging.error('Temporary file could not be ' + 'removed: %s', fpath) + def _on_focus_url_entry(self, gobject): self._primary_toolbar.entry.grab_focus() -- cgit v0.9.1