From 11264b48b2c1072b96b86f26e079e6a29a3dcf84 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 21 Feb 2007 17:06:39 +0000 Subject: Split factory client and server --- (limited to 'sugar/activity') diff --git a/sugar/activity/ActivityFactory.py b/sugar/activity/ActivityFactory.py index ec45fbe..ef27f48 100644 --- a/sugar/activity/ActivityFactory.py +++ b/sugar/activity/ActivityFactory.py @@ -15,71 +15,19 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -import os -import sys import logging import dbus -import dbus.service import gobject import gtk from sugar.presence.PresenceService import PresenceService from sugar.activity import bundleregistry -from sugar.activity.bundle import Bundle -from sugar import logger _ACTIVITY_SERVICE_NAME = "org.laptop.Activity" _ACTIVITY_SERVICE_PATH = "/org/laptop/Activity" _ACTIVITY_INTERFACE = "org.laptop.Activity" -def get_path(activity_name): - """Returns the activity path""" - return '/' + activity_name.replace('.', '/') - -class ActivityFactory(dbus.service.Object): - """Dbus service that takes care of creating new instances of an activity""" - - def __init__(self, activity_type, activity_class): - self._activity_type = activity_type - self._activities = [] - - 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) - if hasattr(module, 'start'): - module.start() - - self._module = module - self._constructor = getattr(module, class_name) - - bus = dbus.SessionBus() - factory = activity_type - 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") - def create(self): - activity = self._constructor() - - self._activities.append(activity) - activity.connect('destroy', self._activity_destroy_cb) - - return activity.window.xid - - def _activity_destroy_cb(self, activity): - self._activities.remove(activity) - - if hasattr(self._module, 'stop'): - self._module.stop() - - if len(self._activities) == 0: - gtk.main_quit() - class ActivityCreationHandler(gobject.GObject): __gsignals__ = { @@ -117,15 +65,3 @@ class ActivityCreationHandler(gobject.GObject): def create(service_name): """Create a new activity from its name.""" return ActivityCreationHandler(service_name) - -def start_factory(activity_class, bundle_path): - """Start the activity factory.""" - bundle = Bundle(bundle_path) - - logger.start(bundle.get_name()) - - os.environ['SUGAR_BUNDLE_PATH'] = bundle_path - os.environ['SUGAR_BUNDLE_SERVICE_NAME'] = bundle.get_service_name() - os.environ['SUGAR_BUNDLE_DEFAULT_TYPE'] = bundle.get_default_type() - - factory = ActivityFactory(bundle.get_service_name(), activity_class) diff --git a/sugar/activity/Makefile.am b/sugar/activity/Makefile.am index 12b0907..fb1066c 100644 --- a/sugar/activity/Makefile.am +++ b/sugar/activity/Makefile.am @@ -1,8 +1,9 @@ sugardir = $(pythondir)/sugar/activity -sugar_PYTHON = \ - __init__.py \ - Activity.py \ - ActivityFactory.py \ - bundle.py \ - bundlebuilder.py \ +sugar_PYTHON = \ + __init__.py \ + Activity.py \ + ActivityFactory.py \ + activityfactoryservice.py \ + bundle.py \ + bundlebuilder.py \ bundleregistry.py diff --git a/sugar/activity/activityfactoryservice.py b/sugar/activity/activityfactoryservice.py new file mode 100644 index 0000000..8ae985e --- /dev/null +++ b/sugar/activity/activityfactoryservice.py @@ -0,0 +1,78 @@ +# Copyright (C) 2006, Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import os + +import dbus +import dbus.service + +from sugar.activity.bundle import Bundle +from sugar import logger + +class ActivityFactory(dbus.service.Object): + """Dbus service that takes care of creating new instances of an activity""" + + def __init__(self, service_name, activity_class): + self._activities = [] + + 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) + if hasattr(module, 'start'): + module.start() + + self._module = module + self._constructor = getattr(module, class_name) + + bus = dbus.SessionBus() + bus_name = dbus.service.BusName(service_name, bus = bus) + object_path = '/' + service_name.replace('.', '/') + dbus.service.Object.__init__(self, bus_name, object_path) + + @dbus.service.method("com.redhat.Sugar.ActivityFactory") + def create(self): + activity = self._constructor() + + self._activities.append(activity) + activity.connect('destroy', self._activity_destroy_cb) + + return activity.window.xid + + def _activity_destroy_cb(self, activity): + self._activities.remove(activity) + + if hasattr(self._module, 'stop'): + self._module.stop() + + if len(self._activities) == 0: + gtk.main_quit() + +def start(activity_class, bundle_path): + """Start the activity factory.""" + bundle = Bundle(bundle_path) + + logger.start(bundle.get_name()) + + os.environ['SUGAR_BUNDLE_PATH'] = bundle_path + os.environ['SUGAR_BUNDLE_SERVICE_NAME'] = bundle.get_service_name() + os.environ['SUGAR_BUNDLE_DEFAULT_TYPE'] = bundle.get_default_type() + + factory = ActivityFactory(bundle.get_service_name(), activity_class) -- cgit v0.9.1