From 5cf2b49cc1dfb1ff4c53d28bf6574fdb5da3b32e Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 21 Feb 2007 23:07:08 +0000 Subject: Add an handle argument to the factory and to the activity constructor. --- (limited to 'sugar/activity') diff --git a/sugar/activity/Activity.py b/sugar/activity/Activity.py index e34b73e..befcc31 100644 --- a/sugar/activity/Activity.py +++ b/sugar/activity/Activity.py @@ -26,7 +26,7 @@ from sugar import env class Activity(gtk.Window): """Base Activity class that all other Activities derive from.""" - def __init__(self): + def __init__(self, activity_handle): gtk.Window.__init__(self) self.connect('destroy', self._destroy_cb) diff --git a/sugar/activity/Makefile.am b/sugar/activity/Makefile.am index df6af5c..87c4265 100644 --- a/sugar/activity/Makefile.am +++ b/sugar/activity/Makefile.am @@ -4,6 +4,7 @@ sugar_PYTHON = \ Activity.py \ activityfactory.py \ activityfactoryservice.py \ + activityhandle.py \ activityservice.py \ bundle.py \ bundlebuilder.py \ diff --git a/sugar/activity/activityfactory.py b/sugar/activity/activityfactory.py index e2a0d4d..6878103 100644 --- a/sugar/activity/activityfactory.py +++ b/sugar/activity/activityfactory.py @@ -23,6 +23,7 @@ import gtk from sugar.presence import PresenceService from sugar.activity import bundleregistry +from sugar.activity.activityhandle import ActivityHandle from sugar import util _ACTIVITY_SERVICE_NAME = "org.laptop.Activity" @@ -40,12 +41,17 @@ class ActivityCreationHandler(gobject.GObject): ([gobject.TYPE_PYOBJECT])) } - def __init__(self, service_name): + def __init__(self, service_name, activity_handle): gobject.GObject.__init__(self) - self._activity_id = self._find_unique_activity_id() - if not self._activity_id: - raise RuntimeError("Cannot generate activity id.") + if activity_handle: + self._activity_handle = activity_handle + else: + activity_id = self._find_unique_activity_id() + if activity_id: + self._activity_handle = ActivityHandle(activity_id) + else: + raise RuntimeError("Cannot generate activity id.") registry = bundleregistry.get_registry() bundle = registry.get_bundle(service_name) @@ -54,10 +60,12 @@ class ActivityCreationHandler(gobject.GObject): proxy_obj = bus.get_object(service_name, bundle.get_object_path()) factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") - factory.create(reply_handler=self._reply_handler, error_handler=self._error_handler) + factory.create(str(self._activity_handle), + reply_handler=self._reply_handler, + error_handler=self._error_handler) def get_activity_id(self): - return self._activity_id + return self._activity_handle.activity_id def _find_unique_activity_id(self): pservice = PresenceService.get_instance() @@ -93,6 +101,6 @@ class ActivityCreationHandler(gobject.GObject): logging.debug("Couldn't create activity: %s" % err) self.emit('error', err) -def create(service_name): +def create(service_name, activity_handle=None): """Create a new activity from its name.""" - return ActivityCreationHandler(service_name) + return ActivityCreationHandler(service_name, activity_handle) diff --git a/sugar/activity/activityfactoryservice.py b/sugar/activity/activityfactoryservice.py index 15ebf14..e520010 100644 --- a/sugar/activity/activityfactoryservice.py +++ b/sugar/activity/activityfactoryservice.py @@ -21,6 +21,7 @@ import dbus import dbus.service from sugar.activity.bundle import Bundle +from sugar.activity import activityhandle from sugar import logger class ActivityFactoryService(dbus.service.Object): @@ -48,8 +49,9 @@ class ActivityFactoryService(dbus.service.Object): dbus.service.Object.__init__(self, bus_name, object_path) @dbus.service.method("com.redhat.Sugar.ActivityFactory") - def create(self): - activity = self._constructor() + def create(self, handle): + activity_handle = activityhandle.create_from_string(handle) + activity = self._constructor(activity_handle) self._activities.append(activity) activity.connect('destroy', self._activity_destroy_cb) diff --git a/sugar/activity/activityhandle.py b/sugar/activity/activityhandle.py new file mode 100644 index 0000000..f9d1f30 --- /dev/null +++ b/sugar/activity/activityhandle.py @@ -0,0 +1,34 @@ +# 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. + +from sugar.presence import PresenceService + +class ActivityHandle(object): + def __init__(self, activity_id): + self.activity_id = activity_id + self.pservice_id = None + + def __str__(self): + return self.activity_id + + def get_presence_service(): + pservice = PresenceService.get_instance() + return pservice.get_activity(self._pservice_id) + +def create_from_string(handle): + activity_handle = ActivityHandle(handle) + activity_handle.pservice_id = handle -- cgit v0.9.1