From 5b6061946af68b03e00de0fd6617c5c8ceb56715 Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Fri, 28 Aug 2009 11:37:35 +0000
Subject: Let user upgrade system activity from .xo #701

---
 src/jarabe/desktop/activitieslist.py |    9 +++++----
 src/jarabe/model/bundleregistry.py   |   22 ++++++++++++++++------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py
index 8b35560..66e2870 100644
--- a/src/jarabe/desktop/activitieslist.py
+++ b/src/jarabe/desktop/activitieslist.py
@@ -403,10 +403,11 @@ class ActivityListPalette(ActivityPalette):
         self.menu.append(self._favorite_item)
         self._favorite_item.show()
 
-        menu_item = MenuItem(_('Erase'), 'list-remove')
-        menu_item.connect('activate', self.__erase_activate_cb)
-        self.menu.append(menu_item)
-        menu_item.show()
+        if activity_info.is_user_activity():
+            menu_item = MenuItem(_('Erase'), 'list-remove')
+            menu_item.connect('activate', self.__erase_activate_cb)
+            self.menu.append(menu_item)
+            menu_item.show()
 
         if not os.access(activity_info.get_path(), os.W_OK):
             menu_item.props.sensitive = False
diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py
index 1d23f0c..b754952 100644
--- a/src/jarabe/model/bundleregistry.py
+++ b/src/jarabe/model/bundleregistry.py
@@ -219,8 +219,17 @@ class BundleRegistry(gobject.GObject):
             logging.exception('Error loading bundle %r', bundle_path)
             return None
 
-        if self.get_bundle(bundle.get_bundle_id()):
-            return None
+        bundle_id = bundle.get_bundle_id()
+        installed = self.get_bundle(bundle_id)
+
+        if installed is not None:
+            if installed.get_activity_version() >= \
+                    bundle.get_activity_version():
+                logging.debug('Skip old version for %s', bundle_id)
+                return None
+            else:
+                logging.debug('Upgrade %s', bundle_id)
+                self.remove_bundle(installed.get_path())
 
         self._bundles.append(bundle)
         return bundle
@@ -367,14 +376,15 @@ class BundleRegistry(gobject.GObject):
                 act.get_activity_version() != bundle.get_activity_version():
             logging.warning('Not uninstalling, different bundle present')
             return
-        elif not act.get_path().startswith(env.get_user_activities_path()):
-            logging.warning('Not uninstalling system activity')
+
+        if not act.is_user_activity():
+            logging.debug('Do not uninstall system activity')
             return
 
         install_path = act.get_path()
 
         bundle.uninstall(install_path, force)
-        
+
         if not self.remove_bundle(install_path):
             raise RegistrationException
 
@@ -385,7 +395,7 @@ class BundleRegistry(gobject.GObject):
         elif act.get_activity_version() == bundle.get_activity_version():
             logging.debug('No upgrade needed, same version already installed.')
             return
-        elif act.get_path().startswith(env.get_user_activities_path()):
+        elif act.is_user_activity():
             try:
                 self.uninstall(bundle, force=True)
             except Exception:
-- 
1.6.3.3

