diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-07-11 09:45:43 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-07-11 09:45:43 (GMT) |
commit | d2059c1baa92c44b2d97005340a0b975dffb44d9 (patch) | |
tree | f1cf88f70b052364d1cab874494666bde48907cc /sugar | |
parent | 9dab5fffafa4f3b266a515aff34321676cea3150 (diff) | |
parent | bb71cd61cff6a577e3ccd3179f38bbc71a567b0f (diff) |
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/activity/activity.py | 2 | ||||
-rw-r--r-- | sugar/datastore/datastore.py | 34 | ||||
-rw-r--r-- | sugar/presence/activity.py | 11 |
3 files changed, 47 insertions, 0 deletions
diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py index 3202703..d63b66e 100644 --- a/sugar/activity/activity.py +++ b/sugar/activity/activity.py @@ -312,6 +312,8 @@ class Activity(Window, gtk.Container): def _get_preview(self): preview_pixbuf = self.get_canvas_screenshot() + if preview_pixbuf is None: + return None preview_pixbuf = preview_pixbuf.scale_simple(units.grid_to_pixels(4), units.grid_to_pixels(3), gtk.gdk.INTERP_BILINEAR) diff --git a/sugar/datastore/datastore.py b/sugar/datastore/datastore.py index 26ea49e..45af947 100644 --- a/sugar/datastore/datastore.py +++ b/sugar/datastore/datastore.py @@ -20,6 +20,9 @@ import logging import gobject from sugar.datastore import dbus_helpers +from sugar import activity +from sugar.activity.bundle import Bundle +from sugar.activity import activityfactory class DSMetadata(gobject.GObject): __gsignals__ = { @@ -85,6 +88,37 @@ class DSObject: file_path = property(get_file_path, set_file_path) + def get_activities(self): + activities = [] + + if self.metadata['activity']: + activity_info = activity.get_registry().get_activity(self.metadata['activity']) + activities.append(activity_info) + + mime_type = self.metadata['mime_type'] + if mime_type: + activities_info = activity.get_registry().get_activities_for_type(mime_type) + for activity_info in activities_info: + if activity_info.service_name != self.metadata['activity']: + activities.append(activity_info) + + return activities + + def is_bundle(self): + return self.metadata['mime_type'] == 'application/vnd.olpc-x-sugar' + + def resume(self): + if self.is_bundle(): + bundle = Bundle(self.file_path) + if not bundle.is_installed(): + bundle.install() + + activityfactory.create(bundle.get_service_name()) + else: + activity_info = self.get_activities()[0] + activityfactory.create_with_object_id(activity_info.service_name, + self.object_id) + def get(object_id): logging.debug('datastore.get') metadata = dbus_helpers.get_properties(object_id) diff --git a/sugar/presence/activity.py b/sugar/presence/activity.py index 3681f91..2df8793 100644 --- a/sugar/presence/activity.py +++ b/sugar/presence/activity.py @@ -166,6 +166,17 @@ class Activity(gobject.GObject): (bus_name, connection, channels) = self._activity.GetChannels() return bus_name, connection, channels + def _leave_cb(self): + # XXX Is this the right thing to do? + self.emit("joined", False, "left activity") + + def _leave_error_cb(self, err): + # XXX We are closing down anyway + pass + def leave(self): + """Leave this shared activity""" # FIXME self._joined = False + self._activity.Leave(reply_handler=self._leave_cb, + error_handler=self._leave_error_cb) |