Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco 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)
commitd2059c1baa92c44b2d97005340a0b975dffb44d9 (patch)
treef1cf88f70b052364d1cab874494666bde48907cc /sugar
parent9dab5fffafa4f3b266a515aff34321676cea3150 (diff)
parentbb71cd61cff6a577e3ccd3179f38bbc71a567b0f (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'sugar')
-rw-r--r--sugar/activity/activity.py2
-rw-r--r--sugar/datastore/datastore.py34
-rw-r--r--sugar/presence/activity.py11
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)