diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-08-09 00:02:34 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-08-09 00:02:34 (GMT) |
commit | 70485218c07c56c8ce5c77ce435663b1c920b347 (patch) | |
tree | 73591d18337f8ca5c618c8fa3f4fe42dcd367c98 /sugar/activity/ActivityFactory.py | |
parent | 7ab6da7278b2a8d50db43f7737ed145e8f27ae7a (diff) |
Split the factory to his own module
Diffstat (limited to 'sugar/activity/ActivityFactory.py')
-rw-r--r-- | sugar/activity/ActivityFactory.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sugar/activity/ActivityFactory.py b/sugar/activity/ActivityFactory.py new file mode 100644 index 0000000..ca3dfb8 --- /dev/null +++ b/sugar/activity/ActivityFactory.py @@ -0,0 +1,76 @@ +import sys +import logging + +import dbus +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" + +def get_path(activity_name): + """Returns the activity path""" + return '/' + activity_name.replace('.', '/') + +def _get_factory(activity_name): + """Returns the activity factory""" + return activity_name + '.Factory' + +class ActivityFactory(dbus.service.Object): + """Dbus service that takes care of creating new instances of an activity""" + + def __init__(self, name, activity_class, default_type): + self._default_type = default_type + + splitted_module = activity_class.rsplit('.', 1) + module_name = splitted_module[0] + class_name = splitted_module[1] + + module = __import__(module_name) + for comp in module_name.split('.')[1:]: + module = getattr(module, comp) + + self._class = getattr(module, class_name) + + bus = dbus.SessionBus() + factory = _get_factory(name) + 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) + + +def create(activity_name, service = None): + """Create a new activity from his name.""" + bus = dbus.SessionBus() + + factory_name = _get_factory(activity_name) + factory_path = get_path(factory_name) + + 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() + +def register_factory(name, activity_class, default_type=None): + """Register the activity factory.""" + factory = ActivityFactory(name, activity_class, default_type) |