[Sugar-devel] Review: [PATCH] Downgrading activities not allowed. (#2164)

Manusheel Gupta manu at seeta.in
Fri Oct 8 22:46:02 EDT 2010


Sascha,

Ishan tried to add the tag - "Coauthored by" in his patch, and that line
gets scrubbed off. We might have mistaken in understanding your review. Can
you elaborate on the format of the patch been worked on by multiple authors?
Unfortunately, git does not provide this feature at this
juncture. Appreciate your pointers as always.

On a separate note, could you please review the patch submitted by Shan
below. It was peer reviewed within the team by Ayush and Anurag.

Regards,

Manu







On Thu, Oct 7, 2010 at 8:52 PM, <sugar-devel-request at lists.sugarlabs.org>wrote:

>
>   2. [PATCH] Downgrading activities not allowed. (#2164)
>      (shanjit at seeta.in)
>
> From: shanjit at seeta.in
> To: sugar-devel at lists.sugarlabs.org
> Subject: [Sugar-devel] [PATCH] Downgrading activities not allowed.
>        (#2164)
> Message-ID: <4cadd298.c83ddf0a.508f.38a4 at mx.google.com>
>
> From: Shanjit Singh Jajmann <shanjit at seeta.in>, Anubhav Aggarwal <
> anubhav at seeta.in>
>
> Downgrading an activity is now made possible. When a .xo file of a version
> older than the currently installed version is clicked, a downgrading option
> is made available, by popping up of a confirmation alert. Depending upton
> the choice selected you can downgrade the activity.
> ---
>  src/jarabe/journal/journalactivity.py |   36 +++++++++++++++++++--
>  src/jarabe/journal/listview.py        |    7 +++-
>  src/jarabe/journal/misc.py            |   56
> ++++++++++++++++++++++++---------
>  src/jarabe/model/bundleregistry.py    |   18 +++++++---
>  4 files changed, 91 insertions(+), 26 deletions(-)
>  mode change 100644 => 100755 src/jarabe/journal/misc.py
>  mode change 100644 => 100755 src/jarabe/model/bundleregistry.py
>
> diff --git a/src/jarabe/journal/journalactivity.py
> b/src/jarabe/journal/journalactivity.py
> index 44cc018..2af55d3 100644
> --- a/src/jarabe/journal/journalactivity.py
> +++ b/src/jarabe/journal/journalactivity.py
> @@ -28,6 +28,7 @@ import os
>
>  from sugar.graphics.window import Window
>  from sugar.graphics.alert import ErrorAlert
> +from sugar.graphics.alert import ConfirmationAlert
>
>  from sugar.bundle.bundle import ZipExtractException, RegistrationException
>  from sugar import env
> @@ -128,7 +129,7 @@ class JournalActivity(Window):
>         self.connect('window-state-event', self.__window_state_event_cb)
>         self.connect('key-press-event', self._key_press_event_cb)
>         self.connect('focus-in-event', self._focus_in_event_cb)
> -
> +
>         model.created.connect(self.__model_created_cb)
>         model.updated.connect(self.__model_updated_cb)
>         model.deleted.connect(self.__model_deleted_cb)
> @@ -136,7 +137,6 @@ class JournalActivity(Window):
>         self._dbus_service = JournalActivityDBusService(self)
>
>         self.iconify()
> -
>         self._critical_space_alert = None
>         self._check_available_space()
>
> @@ -145,7 +145,29 @@ class JournalActivity(Window):
>         alert.connect('response', self.__alert_response_cb)
>         self.add_alert(alert)
>         alert.show()
> -
> +
> +    def __activity_alert1_cb(self):
> +           if misc.check_previous_install() == 1 and
> misc.return_checked()==0:
> +             alert1 = ConfirmationAlert()
> +             logging.debug('value of misc is %d',
> misc.check_previous_install())
> +             alert1.props.title=_('Previous Version Found')
> +             alert1.props.msg = _('A previous version of an installed
> activity was found. Are you sure you want to continue with installation ?
>                                                                    If Yes
> click Ok and the activity icon of the older .xo file in the Journal')
> +             alert1.connect('response', self.__alert1_response_cb)
> +             self.add_alert(alert1)
> +             alert1.show()
> +
> +    def __alert1_response_cb(self, alert1, response_id):
> +        if response_id is gtk.RESPONSE_OK:
> +            logging.debug('value of checked initial %d',
> misc.return_checked())
> +            logging.debug('Installing previous version')
> +            self.remove_alert(alert1)
> +            misc.checked = 1
> +            logging.debug('value of checked final %d',
> misc.return_checked())
> +
> +        elif response_id is gtk.RESPONSE_CANCEL:
> +            logging.debug('Cancelled by user')
> +            self.remove_alert(alert1)
> +
>     def __alert_response_cb(self, alert, response_id):
>         self.remove_alert(alert)
>
> @@ -166,6 +188,8 @@ class JournalActivity(Window):
>         self._list_view = ListView()
>         self._list_view.connect('detail-clicked', self.__detail_clicked_cb)
>         self._list_view.connect('clear-clicked', self.__clear_clicked_cb)
> +        self._list_view.connect('icon-clicked', self.__icon_clicked_cb)
> +        logging.debug('icon clicked in main')
>         self._main_view.pack_start(self._list_view)
>         self._list_view.show()
>
> @@ -195,7 +219,11 @@ class JournalActivity(Window):
>         keyname = gtk.gdk.keyval_name(event.keyval)
>         if keyname == 'Escape':
>             self.show_main_view()
> -
> +
> +    def __icon_clicked_cb(self,a):
> +               logging.debug('value of misc is %d',
> misc.check_previous_install())
> +               self.__activity_alert1_cb()
> +
>     def __detail_clicked_cb(self, list_view, object_id):
>         self._show_secondary_view(object_id)
>
> diff --git a/src/jarabe/journal/listview.py
> b/src/jarabe/journal/listview.py
> index 3d6281a..3dbcc2d 100644
> --- a/src/jarabe/journal/listview.py
> +++ b/src/jarabe/journal/listview.py
> @@ -466,8 +466,12 @@ class ListView(BaseListView):
>     __gsignals__ = {
>         'detail-clicked': (gobject.SIGNAL_RUN_FIRST,
>                            gobject.TYPE_NONE,
> -                           ([object]))
> +                           ([object])),
> +        'icon-clicked': (gobject.SIGNAL_RUN_FIRST,
> +                          gobject.TYPE_NONE,
> +                          ([]))
>     }
> +
>
>     def __init__(self):
>         BaseListView.__init__(self)
> @@ -527,6 +531,7 @@ class ListView(BaseListView):
>         row = self.tree_view.get_model()[path]
>         metadata = model.get(row[ListModel.COLUMN_UID])
>         misc.resume(metadata)
> +        self.emit('icon-clicked')
>
>     def __cell_title_edited_cb(self, cell, path, new_text):
>         row = self._model[path]
> diff --git a/src/jarabe/journal/misc.py b/src/jarabe/journal/misc.py
> old mode 100644
> new mode 100755
> index 32a2847..2b550b9
> --- a/src/jarabe/journal/misc.py
> +++ b/src/jarabe/journal/misc.py
> @@ -31,12 +31,16 @@ from sugar import mime
>  from sugar.bundle.activitybundle import ActivityBundle
>  from sugar.bundle.contentbundle import ContentBundle
>  from sugar import util
> +from sugar.bundle.bundle import AlreadyInstalledException
>
>  from jarabe.view import launcher
>  from jarabe.model import bundleregistry, shell
>  from jarabe.journal.journalentrybundle import JournalEntryBundle
>  from jarabe.journal import model
>
> +checker = 0
> +checked = 0
> +
>  def _get_icon_for_mime(mime_type):
>     generic_types = mime.get_all_generic_types()
>     for generic_type in generic_types:
> @@ -148,31 +152,53 @@ def get_activities(metadata):
>
>     return activities
>
> +def check_previous_install():
> +    return checker
> +
> +def change_checked(a):
> +    checked = a
> +
> +def return_checked():
> +    return checked
> +
>  def resume(metadata, bundle_id=None):
>     registry = bundleregistry.get_registry()
> -
> +    global checker
> +    global checked
>     if is_activity_bundle(metadata) and bundle_id is None:
>
> -        logging.debug('Creating activity bundle')
> -
> +        logging.debug('Creating activity bundle %d', checker)
> +
>         file_path = model.get_file(metadata['uid'])
>         bundle = ActivityBundle(file_path)
> -        if not registry.is_installed(bundle):
> +
> +        if (not registry.is_installed(bundle)) and checked==0 :
>             logging.debug('Installing activity bundle')
> -            registry.install(bundle)
> -        else:
> +            try:
> +                registry.install(bundle,flag=0)
> +            except AlreadyInstalledException :
> +                               checker = 1
> +
> +        elif (not registry.is_installed(bundle)) and checked==1:
> +                registry.install(bundle,flag=1)
> +                logging.debug('installed older version')
> +                checker = 0
> +                checked = 0
> +
> +        else :
>             logging.debug('Upgrading activity bundle')
>             registry.upgrade(bundle)
> -
> -        logging.debug('activityfactory.creating bundle with id %r',
> -                        bundle.get_bundle_id())
> -        installed_bundle = registry.get_bundle(bundle.get_bundle_id())
> -        if installed_bundle:
> -            launch(installed_bundle)
> -        else:
> -            logging.error('Bundle %r is not installed.',
> +
> +        if checker == 0 :
> +            logging.debug('activityfactory.creating bundle with id %r',
> +                            bundle.get_bundle_id())
> +            installed_bundle = registry.get_bundle(bundle.get_bundle_id())
> +            if installed_bundle:
> +                launch(installed_bundle)
> +            else:
> +                logging.error('Bundle %r is not installed.',
>                           bundle.get_bundle_id())
> -
> +
>     elif is_content_bundle(metadata) and bundle_id is None:
>
>         logging.debug('Creating content bundle')
> diff --git a/src/jarabe/model/bundleregistry.py
> b/src/jarabe/model/bundleregistry.py
> old mode 100644
> new mode 100755
> index 699e339..28f0ca3
> --- a/src/jarabe/model/bundleregistry.py
> +++ b/src/jarabe/model/bundleregistry.py
> @@ -53,6 +53,7 @@ class BundleRegistry(gobject.GObject):
>         self._mime_defaults = self._load_mime_defaults()
>
>         self._bundles = []
> +        self.check_previous_install = 0
>         # hold a reference to the monitors so they don't get disposed
>         self._gio_monitors = []
>
> @@ -373,14 +374,19 @@ class BundleRegistry(gobject.GObject):
>                 return True
>         return False
>
> -    def install(self, bundle, uid=None):
> +    def install(self,bundle,flag=0,uid=None):
>         activities_path = env.get_user_activities_path()
> -
> +        logging.debug('value of flag is %d', flag)
> +
>         for installed_bundle in self._bundles:
> -            if bundle.get_bundle_id() == installed_bundle.get_bundle_id()
> and \
> -                    bundle.get_activity_version() <= \
> -                        installed_bundle.get_activity_version():
> -                raise AlreadyInstalledException
> +            if bundle.get_bundle_id() == installed_bundle.get_bundle_id()
> and bundle.get_activity_version() <=
> installed_bundle.get_activity_version():
> +                if flag==0 :
> +                    raise AlreadyInstalledException
> +
> +                elif flag==1 :
> +                    logging.debug('uninstalling previous')
> +                    self.uninstall(installed_bundle, force=True)
> +
>             elif bundle.get_bundle_id() ==
> installed_bundle.get_bundle_id():
>                 self.uninstall(installed_bundle, force=True)
>
> --
> 1.7.2.2
>
>
>
> ------------------------------
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20101009/45116aac/attachment-0001.html>


More information about the Sugar-devel mailing list