diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-08-09 10:57:42 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-08-09 10:57:42 (GMT) |
commit | 7e85c5160ec0a04cb7434cd53368a7c5ba8ce0fa (patch) | |
tree | 13a0147daa22113625ce33818b1d938d893970da /sugar | |
parent | e4c4e866a5c99d81f7fa0a0972311a604c6f1af2 (diff) |
Setup the activity from the shell process, through dbus,
this simplifies things a lot...
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/activity/Activity.py | 50 | ||||
-rw-r--r-- | sugar/activity/ActivityFactory.py | 30 |
2 files changed, 45 insertions, 35 deletions
diff --git a/sugar/activity/Activity.py b/sugar/activity/Activity.py index 339c085..46848a4 100644 --- a/sugar/activity/Activity.py +++ b/sugar/activity/Activity.py @@ -6,8 +6,9 @@ import gobject from sugar.presence.PresenceService import PresenceService import sugar.util -ACTIVITY_SERVICE_NAME = "com.redhat.Sugar.Activity" -ACTIVITY_SERVICE_PATH = "/com/redhat/Sugar/Activity" +ACTIVITY_SERVICE_NAME = "org.laptop.Activity" +ACTIVITY_SERVICE_PATH = "/org/laptop/Activity" +ACTIVITY_INTERFACE = "org.laptop.Activity" class ActivityDbusService(dbus.service.Object): """Base dbus service object that each Activity uses to export dbus methods. @@ -15,31 +16,46 @@ class ActivityDbusService(dbus.service.Object): The dbus service is separate from the actual Activity object so that we can tightly control what stuff passes through the dbus python bindings.""" - def __init__(self, xid, activity): + def __init__(self, pservice, xid, activity): self._activity = activity - + self._pservice = pservice + bus = dbus.SessionBus() - service_name = ACTIVITY_SERVICE_NAME + "%s" % xid - object_path = ACTIVITY_SERVICE_PATH + "/%s" % xid + service_name = ACTIVITY_SERVICE_NAME + self._object_path = ACTIVITY_SERVICE_PATH + "/%s" % xid service = dbus.service.BusName(service_name, bus=bus) - dbus.service.Object.__init__(self, service, object_path) + dbus.service.Object.__init__(self, service, self._object_path) + + def get_object_path(self): + return self._object_path - @dbus.service.method(ACTIVITY_SERVICE_NAME) + @dbus.service.method(ACTIVITY_INTERFACE) def share(self): """Called by the shell to request the activity to share itself on the network.""" self._activity.share() - @dbus.service.method(ACTIVITY_SERVICE_NAME) + @dbus.service.method(ACTIVITY_INTERFACE) + def join(self, activity_ps_path): + """Join the activity specified by its presence service path""" + activity_ps = self._pservice.get(activity_ps_path) + return self._activity.join(activity_ps) + + @dbus.service.method(ACTIVITY_INTERFACE) def get_id(self): """Get the activity identifier""" return self._activity.get_id() - @dbus.service.method(ACTIVITY_SERVICE_NAME) + @dbus.service.method(ACTIVITY_INTERFACE) def get_default_type(self): """Get the activity default type""" return self._activity.get_default_type() - @dbus.service.method(ACTIVITY_SERVICE_NAME) + @dbus.service.method(ACTIVITY_INTERFACE) + def set_default_type(self, default_type): + """Set the activity default type""" + self._activity.set_default_type(default_type) + + @dbus.service.method(ACTIVITY_INTERFACE) def get_shared(self): """Returns True if the activity is shared on the mesh.""" return self._activity.get_shared() @@ -61,12 +77,16 @@ class Activity(gtk.Window): group.realize() self.window.set_group(group.window) - self._dbus_service = ActivityDbusService(self.window.xid, self) + self._bus = ActivityDbusService(self._pservice, self.window.xid, self) def __del__(self): - if self._dbus_service: - del self._dbus_service - self._dbus_service = None + if self._bus: + del self._bus + self._bus = None + + def get_object_path(self): + """Returns the path of the activity dbus service""" + return self._bus.get_object_path() def set_default_type(self, default_type): """Set the activity default type. diff --git a/sugar/activity/ActivityFactory.py b/sugar/activity/ActivityFactory.py index ca3dfb8..3d11e34 100644 --- a/sugar/activity/ActivityFactory.py +++ b/sugar/activity/ActivityFactory.py @@ -6,9 +6,7 @@ import dbus.service import gobject from sugar.presence.PresenceService import PresenceService - -ACTIVITY_SERVICE_NAME = "com.redhat.Sugar.Activity" -ACTIVITY_SERVICE_PATH = "/com/redhat/Sugar/Activity" +from sugar.activity import Activity def get_path(activity_name): """Returns the activity path""" @@ -39,23 +37,13 @@ class ActivityFactory(dbus.service.Object): bus_name = dbus.service.BusName(factory, bus = bus) dbus.service.Object.__init__(self, bus_name, get_path(factory)) - @dbus.service.method("com.redhat.Sugar.ActivityFactory", - in_signature="o", out_signature="") - def create_with_service(self, service_path): - pservice = PresenceService() - service = pservice.get(service_path) - - activity = self._class() - activity.set_default_type(self._default_type) - activity.join(service) - @dbus.service.method("com.redhat.Sugar.ActivityFactory") def create(self): activity = self._class() activity.set_default_type(self._default_type) - + return activity.get_object_path() -def create(activity_name, service = None): +def create(activity_name): """Create a new activity from his name.""" bus = dbus.SessionBus() @@ -65,11 +53,13 @@ def create(activity_name, service = None): proxy_obj = bus.get_object(factory_name, factory_path) factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") - if service: - print service.object_path() - factory.create_with_service(service.object_path()) - else: - factory.create() + activity_path = factory.create() + + bus = dbus.SessionBus() + proxy_obj = bus.get_object(Activity.ACTIVITY_SERVICE_NAME, activity_path) + activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE) + + return activity def register_factory(name, activity_class, default_type=None): """Register the activity factory.""" |