Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/view.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/view.py b/src/view.py
index efc8de6..76708d5 100755
--- a/src/view.py
+++ b/src/view.py
@@ -13,10 +13,11 @@ from gi.repository import GLib
from gi.repository import GObject
GLib.threads_init()
+import logging
import gettext
import os
import re
-from threading import Thread
+from threading import Thread, Event
import gettext
_ = lambda msg: gettext.dgettext('sugar-update-control', msg)
@@ -524,6 +525,11 @@ class ActivityUpdater(SectionView):
# and start refreshing.
self.refresh_cb(None, None)
+ def install_cb(self, registry, bundle, event):
+ bundle.install_or_upgrade(registry)
+ event.set()
+ return False
+
def download_cb(self, widget, event, data=None):
"""Invoked when the 'ok' button is clicked."""
from sugar3.bundle.activitybundle import ActivityBundle
@@ -539,6 +545,7 @@ class ActivityUpdater(SectionView):
# get activity registry
from jarabe.model.bundleregistry import get_registry
registry = get_registry() # requires a dbus-registered main loop
+ install_event = Event()
# progress bar bookkeeping.
counts = [0, self.activity_list.updates_selected(), 0]
def p(n, extra, icon):
@@ -558,8 +565,11 @@ class ActivityUpdater(SectionView):
b = actutils.BundleHelper(f)
p(counts[2], _('Installing %s...') % b.get_name(),
_svg2pixbuf(b.get_icon_data()))
- b.install_or_upgrade(registry)
+ install_event.clear()
+ GLib.idle_add(self.install_cb, registry, b, install_event)
+ install_event.wait()
except:
+ logging.exception("Failed to install bundle")
pass # XXX: use alert to indicate install failure.
if os.path.exists(f):
os.unlink(f)