[Dextrose] [PATCH sugar] More robust completed activity downloads

Aleksey Lim alsroot at member.fsf.org
Sat Feb 5 18:46:28 EST 2011


Previous code relies on percent==1, that might happen in two cases, one for
regular progress event and one when completed download was detected.
---
 extensions/cpsection/updater/model.py |   36 ++++++++++++++------------------
 1 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/extensions/cpsection/updater/model.py b/extensions/cpsection/updater/model.py
index 059d112..ff2eb2c 100755
--- a/extensions/cpsection/updater/model.py
+++ b/extensions/cpsection/updater/model.py
@@ -150,7 +150,7 @@ class UpdateModel(gobject.GObject):
 
         self._downloader = _Downloader(bundle_update)
         self._downloader.connect('progress', self.__downloader_progress_cb)
-        self._downloader.connect('error', self.__downloader_error_cb)
+        self._downloader.connect('finish', self.__downloader_finish_cb)
 
     def __downloader_progress_cb(self, downloader, progress):
         logging.debug('__downloader_progress_cb %r', progress)
@@ -166,21 +166,20 @@ class UpdateModel(gobject.GObject):
                   self._downloader.bundle_update.bundle.get_name(),
                   current, total)
 
-        if progress == 1:
-            self._install_update(self._downloader.bundle_update,
-                                 self._downloader.get_local_file_path())
-            self._downloader = None
-
-    def __downloader_error_cb(self, downloader, error_message):
-        logging.error('Error downloading update:\n%s', error_message)
-
+    def __downloader_finish_cb(self, downloader, success):
         if self._cancelling:
             self._cancel_updating()
             return
 
-        total = self._total_bundles_to_update
-        current = total - len(self._bundles_to_update)
-        self.emit('progress', UpdateModel.ACTION_UPDATING, '', current, total)
+        if success:
+            self._install_update(self._downloader.bundle_update,
+                                 self._downloader.get_local_file_path())
+        else:
+            total = self._total_bundles_to_update
+            current = total - len(self._bundles_to_update)
+            self.emit('progress', UpdateModel.ACTION_UPDATING, '', current, total)
+
+        self._downloader = None
 
         if self._bundles_to_update:
             # do it in idle so the UI has a chance to refresh
@@ -212,10 +211,6 @@ class UpdateModel(gobject.GObject):
                   bundle_update.bundle.get_name(),
                   current + 0.5, total)
 
-        if self._bundles_to_update:
-            # do it in idle so the UI has a chance to refresh
-            gobject.idle_add(self._download_next_update)
-
     def cancel(self):
         self._cancelling = True
 
@@ -261,9 +256,9 @@ class _Downloader(gobject.GObject):
         'progress': (gobject.SIGNAL_RUN_FIRST,
                      gobject.TYPE_NONE,
                      ([float])),
-        'error': (gobject.SIGNAL_RUN_FIRST,
+        'finish': (gobject.SIGNAL_RUN_FIRST,
                   gobject.TYPE_NONE,
-                  ([str])),
+                  ([bool])),
     }
 
     def __init__(self, bundle_update):
@@ -290,7 +285,8 @@ class _Downloader(gobject.GObject):
         try:
             self._input_stream = self._input_file.read_finish(result)
         except:
-            self.emit('error', traceback.format_exc())
+            logging.exception('Error downloading update')
+            self.emit('finish', False)
             return
             
         temp_file_path = self._get_temp_file_path(self.bundle_update.link)
@@ -373,4 +369,4 @@ class _Downloader(gobject.GObject):
             logging.debug('closing output stream')
             self._output_stream.close()
 
-            self.emit('progress', 1.0)
+            self.emit('finish', True)
-- 
1.7.3.4



More information about the Dextrose mailing list